第七章数据库开发ppt课件.ppt
1,.NET 应用程序开发,数据库开发,2,ASP.NET Web开发之C#篇,第七章 数据库编程,3,内容和目标,数据库的基本操作SQL 语句.NET数据库开发数据显示数据删除数据增加数据修改数据查询数据排序,3,4,7.0 SQL Server2000 图形界面操作7.1 数据库连接7.2 数据显示控件GridView7.3 数据显示7.4 数据添加7.5 数据删除7.6 数据修改7.7 详细数据显示(超链接列)7.8 数据分页7.9 数据多选,5,Web数据库应用常见体系结构,数据库服务器,Web界面,ADO.NET,GridViewDataListRepeaterWeb服务器控件,ConnectionDataAdapterCommandDataReaderDataSet,数据库数据表关系视图帐户,浏览器,6,7.0 SQL Server2000 图形界面操作数据库的基本操作,创建库、表录入数据创建访问数据库的用户打开企业管理器安全性登录,右键新建登录,输入帐号和密码,选择数据库,给出“数据库角色”和访问权限,7,学生管理数据库xsgl,创建表tb_usertb_studentYxZyBj,8,数据库的备份和还原备份,备份:选中数据库右键所有任务备份数据库,点击“添加”,选定路径,给定文件名(备份文件的后缀名为bak)。,9,数据库的备份和还原还原,还原:选中数据库右键所有任务还原数据库, 选”从设备”选择设备添加找到bak文件所在路径,确定。,10,如果出错,尝试在“还原窗口”的“选项”中,“在现有数据库上强制还原”复选框上打勾。,11,12,SQL 语句数据操纵语句,SelectInsertUpdate Delete,13,SQL 语句数据控制语句,Create table Alter tableDrop table,14,.NET程序设计的两个方面,界面代码,15,数据显示控件,GridView可以实现数据的网格显示、删除、更新、分页、排序等功能。,16,ADO.NET体系结构,17,ADO.NET的本质五种控件,ConnectionDataAdapterCommandDataReaderDataSet,18,数据库编程Connection控件,第一步:添加引用 using System.Data;using System.Data.SqlClient; 第二步:创建并打开连接在Page_Load事件中填写如下代码SqlConnection sconn = new SqlConnection(server=.;uid=sa;pwd=sa;database=xsgl);sconn.Open();此时出现错误,弹出黄色页面,如何避免?用try catch finally语句。如何捕捉数据库方面的错误?SqlException,19,参考代码,SqlConnection sconn = new SqlConnection(server=.;uid=sa;pwd=sa;database=xsgl); try sconn.Open(); Response.Write(数据库连接成功!); catch (SqlException e1) Response.Write(无法打开登录 xsgl 中请求的数据库。登录失败。用户 sa 登录失败。); finally sconn.Close(); ,20,数据库编程数据显示,第一步:添加引用 using System.Data;using System.Data.SqlClient; 第二步:添加一个GridView控件(工具箱数据双击GridView控件)第三步:提取数据在Page_Load事件中填写如下代码string myConnectString = server=.;uid=xsgl;pwd=xsgl;database=xsgl;SqlConnection myconnection = new SqlConnection(myConnectString);myconnection.Open();SqlDataAdapter mySDAdapter = new SqlDataAdapter(select * from student, myconnection);DataSet ds = new DataSet();mySDAdapter.Fill(ds, word);GridView1.DataSource = ds.Tablesword.DefaultView;GridView1.DataBind();myconnection.Close();,21,数据显示的要点,SqlConnection一条通往服务器的路。参数:string myConnectString = server=.;uid=xsgl;pwd=xsgl;database=xsgl;其中 server=. or server=localhost or server=(local) 都是指Web服务器上的Sql Server。SqlDataAdapter相当于搬运工。DataSet本地的数据库。,22,数据浏览图解,数据库服务器,本地内存数据库,Connection,DataAdapter,Table1,Table2,Tb2,23,数据库编程数据显示:结果处理,结果可以看到表内的所有数据问题:如何能够使GridView的标题显示为汉字?Key:修改Select语句为:select xh 学号,xm 姓名,csrq as 出生日期 from student 如何能够使GridView的按照姓名排序?Key:修改Select语句为:select xh 学号,xm 姓名,csrq as 出生日期 from student order by xm,24,执行Select语句的模版程序,string myConnectString = server=.;uid=xsgl;pwd=xsgl;database=xsgl;SqlConnection myconnection = new SqlConnection(myConnectString);myconnection.Open();SqlDataAdapter mySDAdapter = new SqlDataAdapter(select * from student, myconnection);DataSet ds = new DataSet();mySDAdapter.Fill(ds, word);GridView1.DataSource = ds.Tablesword.DefaultView;GridView1.DataBind();myconnection.Close();只需修改红色部分即可。,25,数据库编程数据删除,第一步:添加删除列 并 写显示数据的代码(见数据显示)第二步:获取删除行的关键字(找到对应列)第三步:构造删除数据的SQL语句(Delete)第四步:执行删除数据的SQL语句第五步:刷新界面(反映删除了记录),26,数据库编程数据删除添加删除列,添加GridView控件,Page_Load事件中写数据显示代码选中GridView,智能标记(GridView右上角的黑三角),编辑列CommandField选中“删除”,“添加”按钮HeaderText属性设置为“删除”,27,运行,查看效果(这一步属于构造界面,以后是写代码),28,数据库编程数据删除获取删除行的关键字,删除行的关键字主要是行号和列号,列号是事先知道的,但行号的由用户决定的。行号的获取:选中GridView后,打开属性窗口,选“事件”(闪电图标),双击RowDeleting事件,转到代码视图。Response.Write(e.RowIndex.ToString();获取关键字:Response.Write(GridView1.Rowse.RowIndex.Cells1.Text.ToString(),29,数据库编程数据删除构造删除数据的SQL语句,string xh1=GridView1.Rowse.RowIndex.Cells1.Text.ToString(); string Sql_Delete = delete from student where xh= + xh1 + ;Response.Write(Sql_Delete );运行查看SQL 语句然后到企业管理器中去执行,30,数据库编程数据删除执行SQL 语句,SqlConnection myConnection = new SqlConnection(server=sgq;uid=xsgl;pwd=xsgl;database=xsgl);myConnection.Open();SqlCommand myCommand = new SqlCommand(Sql_Delete, myConnection);myCommand.ExecuteNonQuery();myConnection.Close();,31,数据库编程数据删除刷新界面,string myConnectString = server=sgq;uid=xsgl;pwd=xsgl;database=xsgl;SqlConnection myconnection = new SqlConnection(myConnectString);myconnection.Open();SqlDataAdapter mySDAdapter = new SqlDataAdapter(select xh 学号,xm 姓名,csrq as 出生日期 from student, myconnection);DataSet ds = new DataSet();mySDAdapter.Fill(ds, word);GridView1.DataSource = ds.Tablesword.DefaultView;GridView1.DataBind();myconnection.Close();,32,删除确认的实现,百度gridview 删除确认第一项就可以参考设置:在删除按钮的那一列属性里面,把DeleteText属性设为 删除,33,思考题:如何实现数据的添加?提示:用TextBox输入学号,姓名等,添加按钮,且能够实时反映结果。基本思路:构造Insert语句,34,数据库编程数据添加,第零步:添加GridView,Page_Load中写显示代码第一步:添加Label、TextBox和DropDownList第二步:构造添加数据的SQL语句(Insert)第三步:执行添加数据的SQL语句第四步:刷新界面(反映增加了记录)第五步:清空全部TextBox,35,基本界面运行后界面,36,参考代码Page_Load&Browse函数,protected void Page_Load(object sender, EventArgs e) if (!Page.IsPostBack) Browse(); ,37,Browse函数,ublic void Browse() string myConnectString = server=(local);uid=xsgl;pwd=xsgl;database=xsgl; /server=. or server=localhost or server=(local) 都是指Web服务器上的Sql Server。 SqlConnection myconnection = new SqlConnection(myConnectString); myconnection.Open(); SqlDataAdapter mySDAdapter = new SqlDataAdapter(select xh 学号,xm 姓名,xb 性别,csrq 出生日期 from student, myconnection); DataSet ds = new DataSet(); mySDAdapter.Fill(ds, word); GridView1.DataSource = ds.Tablesword.DefaultView; GridView1.DataBind(); myconnection.Close(); ,38,构造添加数据的SQL语句(Insert),insert 语句的框架insert into student (列名列表) values (值列表)string sql_insert = insert into student (xh,xm,xb,csrq) values (+xh1+,+xm1+,+xb1+,+csrq1+);,39,执行添加数据的SQL语句,写一个执行Delete, Insert, Update等其他语句的公共函数。public void DataAction(string sql_nonquery) SqlConnection conn = new SqlConnection(); conn.ConnectionString = server=.;uid=xsgl;pwd=xsgl;database=xsgl; conn.Open(); SqlCommand sc = new SqlCommand(sql_nonquery, conn); sc.ExecuteNonQuery(); conn.Close(); ,40,rotected void Button1_Click(object sender, EventArgs e) string xh1, xm1, xb1, csrq1; xh1 = txt_xh.Text; xm1 = txt_xm.Text; xb1 = rbl_xb.Itemsrbl_xb.SelectedIndex.ToString(); csrq1 = txt_csrq.Text; string sql_insert = insert into student (xh,xm,xb,csrq) values (+xh1+,+xm1+,+xb1+,+csrq1+); /insert 语句的框架insert into student (列名列表) values (值列表) DataAction(sql_insert); /执行Insert语句 Browse(); /刷新界面 ,41,可能出现的问题,直接在属性窗口中为控件配置属性直接点添加,出错,什么原因?Rbl_xb没有选中的项目。增加if语句。,42,数据库编程数据更新,第一步:添加GridView,智能标记中添加编辑列,绑定列第二步:构造编辑界面(模板列)第三步:构造修数据的SQL语句(Update)第四步:执行update语句第五步:刷新界面(反映更新了记录),43,数据库编程数据更新添加编辑列,选中GridView,智能标记(GridView右上角的黑三角),CommandField选中“编辑、更新、删除”,“添加”按钮HeaderText属性设置为“编辑”自动生成字段的复选框清空添加两个BoundField字段,设置其DataField属性分别为xh、xm ;设置其HeaderText属性分别为学号、姓名运行,查看效果(此时两列均有数据绑定标识)注意:此时SQL语句为Select * from student,44,45,在Page_Load中写代码:protected void Page_Load(object sender, EventArgs e) if (!Page.IsPostBack) Browse(); ,46,系统提示RowEditing事件选中姓名转换为模板列在GridView1的RowEditing事件中写如下代码:GridView1.EditIndex = e.NewEditIndex;Browse();问题:两列都有编辑框出现,学号如何避免编辑?Key:将学号的ReadOnly属性设置为true,47,RowUpdating 事件的代码protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)string xh = GridView1.Rowse.RowIndex.Cells2.Text.ToString().Trim();string xm = (TextBox)GridView1.Rowse.RowIndex.Cells3.FindControl(TextBox11).Text.ToString().Trim();string SQL_Update = update student set xm= + xm + where xh= + xh + ;/Response.Write(SQL_Update);data_action(SQL_Update);GridView1.EditIndex = -1;Browse();,48,运行,发现程序更新后没有变,怎么回事?显示Update语句,看到没有获取到新输入的值。解决办法: if(!Page.IsPostBack) Browse();,49,数据库编程数据分页,第一步:设置GridView允许分页第二步:设置每页的记录条数第三步:在响应事件中编程,50,数据库编程数据分页设置GridView允许分页,选中GridView,属性AllowPaging:truePageSize:2,51,数据库编程数据分页在响应事件中编程,protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) GridView1.PageIndex = e.NewPageIndex; Browse(); ,52,登录功能的实现,1、在数据库中添加表“xtyh”字段:username, password, usertype ,bz2、填写数据3、构造界面,53,多项选择模板列与复选框,1、选中GridView智能标记编辑列添加TemplateField2、选中GridView右键编辑模板,ItemTemplate中放一个CheckBox1,结束模板编辑3、Page_Load事件代码:4、添加按钮Button_Click事件写代码:5、可能遇到的问题:只能看到一个CheckBox原因: CheckBox设置为绝对定位了。解决方案:在html视图中将CheckBox1的style属性删除掉。,54,protected void Page_Load(object sender, EventArgs e) if (!IsPostBack) string sql_select = select * from student; string con = server=sgq;database=xsgl;uid=xsgl;pwd=xsgl; SqlConnection cn1 = new SqlConnection(con); cn1.Open(); SqlDataAdapter sda = new SqlDataAdapter(sql_select, cn1); DataSet ds = new DataSet(); sda.Fill(ds, stu); GridView1.DataSource = ds.Tablesstu.DefaultView; GridView1.DataBind(); ,55,string s = ; for (int i = 0; i GridView1.Rows.Count; i+) CheckBox cc = (CheckBox)GridView1.Rowsi.Cells0.FindControl(CheckBox1); if (cc.Checked) s = s + i.ToString()+,; Response.Write(s);,56,57,思考题,如何将多选的项目删除?如何提示删除确认对话框?参考答案:for (int i = 0; i GridView1.Rows.Count; i+) CheckBox ck = (CheckBox)GridView1.Rowsi.Cells0.FindControl(CheckBox1); if (ck.Checked) string xh = GridView1.Rowsi.Cells1.Text; string sql_delete = delete from student where xh=+xh+; DataAction(sql_delete); Response.Write(i); Browse();,此处填写删除该记录的代码,58,日期类型不显示时间,百度:sql server只显示日期第1项:如何在SQL Server2000中得datetime只显示日期或只显示时间? - .CONVERT(VARCHAR(30),GETDATE(),111)第6项:Sql各类日期时间的取得_莫扎特的右手 convert(varchar(10),getdate(),120),59,60,DataReader读取数据,步骤:创建连接构造Sql语句(select)创建SqlDataReader实例取出相关数据关闭连接显示数据,61,参考源代码,protected void Button1_Click(object sender, EventArgs e) string sql_select = select * from student where xh=+txt_xh.Text+ ; string con = server=.;database=xsgl;uid=xsgl;pwd=xsgl; SqlConnection cn1 = new SqlConnection(con); cn1.Open(); SqlCommand sc = new SqlCommand(sql_select, cn1); SqlDataReader sdr = sc.ExecuteReader(); while (sdr.Read() Response.Write( + sdrxm.ToString(); Response.Write( + sdrxb.ToString(); Response.Write( + sdrcsrq.ToString()+); /Response.Write( + sdr.GetString(4); sdr.Close(); cn1.Close(); ,62,代码说明,1、 DataReader不是用New创建的对象,而是调用SqlCommand的ExecuteReader()方法的返回值2、可以通过索引或者列名获取相关的数据Response.Write(+sdrxm.ToString();Response.Write( + sdr2.ToString();3、还可以通过Get方法获取相关的数据sdr.GetString(4)4、sdr.Read()返回值是bool类型,一次只取一条记录5、模糊查询%和_ like 赵% 姓赵的同学,63,空值出错问题,当用户的某项没有填写过,企业管理器中显示null值,读取时会出错,怎么解决?,64,超链接列,1、新建两个网页HyperLinkColumn1.aspx和HyperLinkColumn2.aspx2、HyperLinkColumn1.aspx中添加GridView,添加using引用3、GridView添加超链接列和绑定列(智能标记中实现)四个列:学号(超链接列);姓名,性别,出生日期:这三个是绑定列。4、Page_Load事件中写显示代码Browse()函数5、编辑超链接列和绑定列(属性和具体值见下页)6、在HyperLinkColumn2.aspx的Page_Load事件写代码(见再下一页),65,HeaderText: 学号DataTextField: xhDataNavigateUrlFields: xhDataNavigateUrlFormatString: HyperLinkColumn2.aspx?id=0,66,HyperLinkColumn2.aspx的Page_Load事件,protected void Page_Load(object sender, EventArgs e) string id; if (Requestid != null) id = Requestid.ToString(); Response.Write(id); else Response.Write(null); ,67,数据绑定到列表框,新建一个页面放一个DropDownList添加引用在Page_Load事件中写代码,68,Page_Load事件中代码,protected void Page_Load(object sender, EventArgs e) string datafield, sql, myConnectString; myConnectString = server=(local);uid=xsgl;pwd=xsgl;database=xsgl; sql = select * from student ; if (!Page.IsPostBack) SqlConnection Dconnection = new SqlConnection(myConnectString); SqlDataAdapter Dcommand; Dcommand = new SqlDataAdapter(sql, Dconnection); Dconnection.Open(); DataSet ds = new DataSet(); Dcommand.Fill(ds, QDQ); DropDownList1.DataSource = ds.TablesQDQ.DefaultView; DropDownList1.DataTextField = xm; DropDownList1.DataBind(); Dconnection.Close(); ,69,排序,1、放一个GridView,将GridView的AllowSorting属性设置为true2、添加using引用3、写Browse(string sortorder)函数(见下页)4、在Page_Load事件中写代码if (!Page.IsPostBack) Browse(xh); 5、在GridView的GridView1_Sorting事件中写代码(见再下页),70,public void Browse(string sortorder) string myConnectString = server=.;uid=xsgl;pwd=xsgl;database=xsgl; SqlConnection myconnection = new SqlConnection(myConnectString); myconnection.Open(); /SqlDataAdapter mySDAdapter = new SqlDataAdapter(select * from student order by +sortorder+ , myconnection); SqlDataAdapter mySDAdapter = new SqlDataAdapter(select * from student , myconnection); DataSet ds = new DataSet(); mySDAdapter.Fill(ds, word); ds.Tablesword.DefaultView.Sort = sortorder; GridView1.DataSource = ds.Tablesword.DefaultView; GridView1.DataBind(); myconnection.Close(); ,71,protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) string sortorder = e.SortExpression.ToString(); Response.Write(sortorder); Browse(sortorder); ,72,分组统计,1、创建一个成绩表(cj),录入数据2、新建网页,放一个按钮,然后添加using 3、分组统计的Sql语句是4、写按钮事件代码5、创建数据表pm(xh,pjz,pm)6、将结果写入数据表,73,按钮事件代码,rotected void Button1_Click(object sender, EventArgs e) string myConnectString = server=(local);uid=xsgl;pwd=xsgl;database=xsgl; /server=. or server=localhost or server=(local) 都是指Web服务器上的Sql Server。 SqlConnection myconnection = new SqlConnection(myConnectString); myconnection.Open(); SqlCommand sc = new SqlCommand(select avg(cj) as pjf,xh from cj group by xh, myconnection); SqlDataReader sdr = sc.ExecuteReader(); while (sdr.Read() Response.Write(sdrxh.ToString() + + sdrpjf.ToString() + ); myconnection.Close(); ,74,数据查询,1、构造界面如图2、添加引用3、获取WebConfig中的连接字符串4、在Page_Load事件中显示所有数据5、初始化院系下拉列表框院系必然被选中,怎么解决?解决方案:将下拉列表框中再填一项”未选择”.,75,Page_Load事件代码: if (!Page.IsPostBack)/网页第一次运行时执行的代码 Browse(); DropDownList_Bind(); public void DropDownList_Bind() string datafield, sql; sql = select * from student ; SqlConnection Dconnection = new SqlConnection(myConnectString); SqlDataAdapter Dcommand; Dcommand = new SqlDataAdapter(sql, Dconnection); Dconnection.Open(); DataSet ds = new DataSet(); Dcommand.Fill(ds, QDQ); DropDownList1.DataSource = ds.TablesQDQ.DefaultView; DropDownList1.DataTextField = “yx; DropDownList1.DataBind(); Dconnection.Close(); ,76,查询按钮代码:string wherestate = where yx=+DropDownList1.SelectedValue+;SqlConnection myconnection = new SqlConnection(myConnectString); myconnection.Open(); SqlDataAdapter mySDAdapter = new SqlDataAdapter(select xh 学号,xm 姓名,xb 性别,csrq 出生日期 from student +wherestate, myconnection); DataSet ds = new DataSet(); mySDAdapter.Fill(ds, word); GridView1.DataSource = ds.Tablesword.DefaultView; GridView1.DataBind(); myconnection.Close();,77,添加“未选择”项后的代码,string sql=select * from student ; SqlConnection con = new SqlConnection(myConnectString); SqlDataAdapter sda; sda = new SqlDataAdapter(sql, con); con.Open(); DataSet ds = new DataSet(); sda.Fill(ds, yx); ArrayList aaa = new ArrayList(); aaa.Add(全部); for (int i = 0; i ds.Tablesyx.Rows.Count; i+) DataRow dr = ds.Tablesyx.Rowsi; aaa.Add(dr“yx”.ToString(); DDL.DataSource = aaa; DDL.DataBind(); con.Close();,78,ArrayList的用法,79,可能遇到的问题,1、按钮的大小变形了解决办法:自己设定按钮的Width属性经验:两个字的按钮一般大小设定为40.,80,显示图片,81,导出数据表到Excel,StreamWriter sw = new StreamWriter(a.xls);此时默认的路径是:C:Program FilesMicrosoft Visual Studio 8Common7IDE注意:如果不知道具体路径,可以搜索a.xls思考:如何实现相对定位?,82,从Excel导入数据表,83,OleDb实现Access数据库的访问,using System.Data.OleDbAccess数据库与SqlServer的区别。创建一个Test数据库,创建一个yonghu表,字段Username,password,输入两条记录:a,123;admin,admin.Access数据库可以不用密码访问,也可以给Access加上密码.,84,Access访问实例,1 放一个GridView,一个按钮;2 添加引用using System.Data.OleDb;3 写代码:,85,string DBFileLocation = ; DBFileLocation = Server.MapPath(Test.mdb); OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0;Data Source= + DBFileLocation ; /+ ;User ID=Admin;Database Password=; conn.Open(); OleDbDataAdapter oda = new OleDbDataAdapter(select * from yonghu, conn); DataSet ds = new DataSet(); oda.Fill(ds, yh); GridView1.DataSource = ds.Tablesyh.DefaultView; GridView1.DataBind(); conn.Close();,86,综合实例,在一个页面内实现数据的添加,修改,删除,更新1、创建院系表,表名 yx,列