1 / 34

第 5 章 数据库的访问和管理( 4 )

第 5 章 数据库的访问和管理( 4 ). 1. 2. 内容回顾. 使用 Command 对象 实现模糊查询 ADO.NET 事务处理 DataReader 对象 DataAdapter 对象. 内容提要. DataSet 对象 DataView 对象 Repeater 数据控件 DataList 数据控件 DataGrid 数据控件 网上购物数据库设计. DataSet 对象.

olathe
Download Presentation

第 5 章 数据库的访问和管理( 4 )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 数据库的访问和管理(4) 1 2

  2. 内容回顾 • 使用Command对象 • 实现模糊查询 • ADO.NET事务处理 • DataReader对象 • DataAdapter对象

  3. 内容提要 • DataSet对象 • DataView对象 • Repeater数据控件 • DataList数据控件 • DataGrid数据控件 • 网上购物数据库设计

  4. DataSet对象 • DataSet封装在命名空间“Syste.Data”中。DataSet中可以包含任意数量的DataTable(数据表),且每个DataTable对应一个数据库中的数据表和视图。 • 通过DataAdapter的Fill方法,将表内容填充到DataSet对象中,而且可以填充多个表。利用别名来区分。 • 比如“da.Fill(ds,"grade1");”的功能是将da对象中的数据填充到ds对象中,并起别名“grade1” • DataSet对象使用XML格式来存储数据,DataSet可以脱离数据源。可以利用程序创建DataSet对象,并填充内部的数据,不从数据源读取数据。

  5. 自动生成DataSet对象 程序名称:5-13.aspx <%@ Page Language="VB" %> <%@ Import namespace="System.Data" %> <script runat="server"> Sub Page_Load(Sender As Object, e As EventArgs) dim myds as DataSet=new DataSet() dim mydt as DataTable=new DataTable("Squares") dim mydc as DataColumn=new DataColumn() dim mydr as DataRow mydc.DataType=System.Type.GetType("System.Int32") mydc.ColumnName="数字" mydt.Columns.Add(mydc) mydc=new DataColumn() mydc.DataType=System.Type.GetType("System.Int32") mydc.ColumnName="平方" mydt.Columns.Add(mydc) myds.Tables.Add(mydt) dim i as integer for i = 0 to 10 mydr = mydt.NewRow() mydr("数字") = i mydr("平方") = i * i mydt.Rows.Add(mydr) next dg.DataSource = myds.Tables("Squares").DefaultView dg.DataBind() End Sub </script> <asp:DataGrid id="dg" runat= "server"/>

  6. 自动生成DataSet对象 • 程序中,首先创建1个DataSet对象,然后创建1个DataTable对象,利用循环初始化DataTable对象 • 最后将DataTable对象填充到DataSet对象中,通过和DataGrid数据控件绑定将数据输出到浏览器上。

  7. 操作DataSet对象 程序名称:5-14.aspx <%@ Page Language="VB" %> <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> <Script runat="server"> Sub Page_Load(Sender As Object, e As EventArgs) dim Conn as new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb")) Conn.Open() dim strSQL="select * from grade;" dim da as new OleDbDataAdapter(strSQL, Conn) dim ds as new DataSet() da.Fill(ds,"grade") dim dt as DataTable=new DataTable() dt = ds.Tables("grade") dim row as DataRow row = dt.NewRow() row("学号")= "2005" row("姓名")= "薛为民" row("语文") = 96 row("数学") = 98 row("英语") = 100 dt.Rows.Add(row) dim cb as OleDbCommandBuilder = new OleDbCommandBuilder(da) da.Update(ds,"grade") dg.DataSource = ds.Tables("grade").DefaultView dg.DataBind() Conn.Close() End Sub </script> <ASP:DataGrid id="dg" runat="server"/>

  8. 动态修改DataSet对象 • 程序从数据库中读取了1个数据库表,将其填充到DataSet对象中,然后新创建一行 • 将其添加到DataSet对象中。“OleDbCommandBuilder cb = new OleDbCommandBuilder(da)”的功能是对新加的数据行进行转换。

  9. DataView对象 • DataView对象定义了DataTable的数据查看方式。 • 数据默认的查看方式是将数据以表格的形式排列,且数据排列的顺序遵循从数据库表中取出数据时排列的顺序 • 可以通过DataView对象使数据按照某些规则进行显示。

  10. 使用DataView对象 程序名称:5-15.aspx <%@ Page Language="VB" %> <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> <Script runat="server"> Sub Page_Load(Sender As Object, e As EventArgs) dim Conn as new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb")) dim strSQL = "select * from grade" dim Comm as new OleDbCommand(strSQL,Conn) dim da as new OleDbDataAdapter() da.SelectCommand = Comm Conn.Open() dim ds as new DataSet da.Fill(ds,"grade") dim dv as DataView = new DataView(ds.Tables("grade")) dv.RowFilter = " 数学 > 60" dv.Sort = "学号 desc, 数学 DESC" Response.Write("满足条件的记录有:" & dv.Count & "条") dg.DataSource = dv dg.DataBind() Conn.Close() End Sub </script> <ASP:DataGrid id="dg" runat="server"/>

  11. DataView对象 • 通过DataView对象的“Find()”方法可以其数据进行查找 • 如果找到了,该方法将返回所在行的索引,可以将查找到的数据输出。

  12. 程序名称:5-16.aspx <%@ Page Language="VB" %> <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> <Script runat="server"> Sub Page_Load(Sender As Object, e As EventArgs) dim Conn as OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb")) dim strSQL as String= "select * from grade" dim Comm as OleDbCommand = new OleDbCommand(strSQL,Conn) dim da as OleDbDataAdapter= new OleDbDataAdapter() da.SelectCommand = Comm Conn.Open() dim ds as DataSet= new DataSet() da.Fill(ds,"grade") dim dv as DataView=new DataView(ds.Tables("grade"),"","姓名", DataViewRowState.CurrentRows) dim rowIndex as Integer rowIndex= dv.Find("薛为民") If rowIndex = -1 Then Response.Write("没有找到!") else Response.Write(dv(rowIndex)("姓名") &": "&dv(rowIndex)("数学")) End If dg.DataBind() Conn.Close() End Sub </script> <ASP:DataGrid id="dg" runat="server"/>

  13. 数据控件 • 数据控件属于Web服务器端控件,数据控件包括三个控件: • Repeater控件,DataList控件和DataGrid控件。 • 其中最常用的数据控件是DataGrid控件,也是功能最强大的数据控件。

  14. Repeater数据控件 • Repeater控件的主要功能是以更自由的方式来控制数据,用非表格的形式来展现数据。Repeater控件最关键的部分是摸板,允许用户定义5种摸板: • ItemTemplate,数据摸板,这是Repeater控件必须的 • AlternatingItemTemplate,隔行数据模板,可选参数 • SeparatorTemplate,分割线模板,可选参数 • HeaderTemplate,抬头模板,可选参数 • FooterTemplate,结尾模板,可选参数

  15. 使用Repeater控件 <%@ Page Language="VB" %> <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> <Form runat="server"> <asp:Repeater id="rep" runat="server"> <ItemTemplate> <B><%#DataBinder.Eval(Container.DataItem, "姓名") %> (<%#DataBinder.Eval(Container.DataItem, "学号") %>)</B> 数学成绩:<%#DataBinder.Eval(Container.DataItem, "数学") %><BR> </ItemTemplate> </asp:Repeater> </Form> <script runat="server"> Sub Page_Load(Sender As Object, e As EventArgs) dim Provider,DataBase,ConnStr,SQL as String Provider = "Microsoft.Jet.OLEDB.4.0;" DataBase = Server.MapPath("person.mdb") ConnStr = "Provider=" + Provider + "Data Source=" + DataBase dim da as OleDbDataAdapter da = new OleDbDataAdapter("Select * From grade",ConnStr) dim ds as DataSet=new DataSet() da.Fill(ds,"grade") rep.DataSource=ds.Tables("grade").DefaultView rep.DataBind() End Sub </script>

  16. 使用Repeater控件的其他模板 • 除了可以使用“ItemTemplate”模板,还可以使用头摸板、尾摸板以及隔行显示模板。 • 一般隔行显示模板用来定义不同的显示样式

  17. 程序名称:5-18.aspx <%@ Page Language="VB" %> <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> <Form runat="server"> <asp:Repeater id="rep" runat="server"> <HeaderTemplate> 首届毕业生成绩表<p> </HeaderTemplate> <ItemTemplate> <Font color="red"><B><%#DataBinder.Eval(Container.DataItem, "姓名")%> (<%#DataBinder.Eval(Container.DataItem, "学号") %>)</B> 数学成绩:<%#DataBinder.Eval(Container.DataItem, "数学") %><BR> </Font> </ItemTemplate> <AlternatingItemTemplate> <Font color="blue"><B><%#DataBinder.Eval(Container.DataItem, "姓名")%> (<%#DataBinder.Eval(Container.DataItem, "学号") %>)</B> 数学成绩:<%#DataBinder.Eval(Container.DataItem, "数学") %><BR> </Font> </AlternatingItemTemplate> <SeparatorTemplate> <HR WIDTH="80%" ALIGN="LEFT"> </SeparatorTemplate> <FooterTemplate> 到此结束! </FooterTemplate> </asp:Repeater> </Form>

  18. Repeater控件 • 程序定义了头部显示的信息和尾部显示的信息 • 并定义奇数行显示成红色,偶数行显示成蓝色。

  19. DataList数据控件 • DataList数据控件在Repeater数据控件基础上进行了扩展,除了含有Repeater的功能外,还可以设置单行笔数等等。 • DataList控件和Repeater控件数据输出的格式都取决于样板的定义,不同点是:DataList在浏览器中会以表格的形式输出。

  20. 程序名称:5-19.aspx <%@ Page Language="vb"%> <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> <Form runat="server"> <asp:DataList id="dl" runat="server" RepeatDirection="Horizontal" RepeatColumns="3"> <ItemTemplate> <B><%#DataBinder.Eval(Container.DataItem, "姓名") %> (<%#DataBinder.Eval(Container.DataItem, "学号") %>)</B> 数学成绩:<%#DataBinder.Eval(Container.DataItem, "数学") %>, </ItemTemplate> </asp:DataList> </Form> <script runat="server"> Sub Page_Load(Sender As Object, e As EventArgs) dim Provider,DataBase,ConnStr,SQL as string Provider = "Microsoft.Jet.OLEDB.4.0;" DataBase = Server.MapPath("person.mdb") ConnStr = "Provider=" + Provider + "Data Source=" + DataBase dim Comm as new OleDbDataAdapter("Select * From grade",ConnStr) dim ds as new DataSet() Comm.Fill(ds,"grade") dl.DataSource = ds.Tables("grade").DefaultView dl.DataBind() End Sub </script>

  21. DataGrid数据控件 • DataGrid数据控件是这3个数据控件中最强大的一个。使用DataGrid控件可以自动显示表的内容。利用DataReader对象或者DataSet对象和DataGrid控件进行绑定,就可以进行数据输出。 • 在以往的Web技术中,比如ASP或者JSP,实现数据的分页显示,需要编写很长的代码才能实现。在ASP.NET中利用DataGrid控件,只要做一下设置,就可以实现分页。

  22. 使用DataGrid控件实现分页 程序名称:5-20.aspx <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> <script Language="VB" runat="server"> Sub Page_Load(Sender As Object, e As EventArgs) dim Provider,DataBase,ConnStr,SQL as String Provider = "Microsoft.Jet.OLEDB.4.0;" DataBase = Server.MapPath("person.mdb") ConnStr = "Provider=" & Provider & "Data Source=" + DataBase dim da as OleDbDataAdapter da = new OleDbDataAdapter("Select * From grade",ConnStr) dim ds as DataSet = new DataSet() da.Fill(ds,"grade") DataGrid1.DataSource = ds.Tables("grade").DefaultView DataGrid1.DataBind() End Sub </script> <html> <body> <form runat="server"> <asp:DataGrid id="DataGrid1" runat="server"

  23. 使用DataGrid控件实现分页 <asp:DataGrid id="DataGrid1" runat="server" BorderColor="Black" BorderEidth="1" GridLines="Both" CellPadding="3" CellSpacing="0" Font-Name="Verdana" Font-Size="8pt" Headerstyle-BackColor="#AAAADD" AlternatingItemStyle-BackColor="#eeeeee" AllowPaging="True" PageSize="5" PagerStyle-HorizontanAlign="Right"/> </Form> </body> </html>

  24. 使用DataGrid控件实现分页 • 与分页相关的属性如下: • AllowPaging:是指其值设为“True”时才允许翻页,所以其具有分页浏览的功能; • PageSize:表示一页显示的记录行数,默认是10条记录; • PagerStyle-HorizontanAlign:指分页显示的定位,默认是Left。

  25. 使用DataGrid控件实现分页 • 在上面的例子中,可以看到对于分页的控制,但是只是一个普通、简单的分页,可以根据自己的需要做一些改进。如果需要将“<”与“>”符号换成“上一页”与“下一页”,只要加入两条属性即可。 • PagerStyle-NextPageText=“下一页” • PagerStyle-PrevPageText=“上一页” • 如果希望页码用1、2、3这些数字标记,再设置属性: • PagerStyle-Mode=”NumericPages” • 如果想显示一共多少页,而且显示当前是地几页,这时需要添加如下代码: • 显示当前页代码: • <font color=red> <% =Datagrid1.CurrentPageIndex+1%> </font> <br> • 显示总页数代码: • <font color=red> <% =Datagrid1.PageCount% > </font> <br>

  26. 实现分页的数字显示 程序名称:5-21.aspx <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> <script Language="VB" runat="server"> Sub Page_Load(Sender As Object, e As EventArgs) dim Provider,DataBase,ConnStr,SQL as String Provider = "Microsoft.Jet.OLEDB.4.0;" DataBase = Server.MapPath("person.mdb") ConnStr = "Provider=" & Provider & "Data Source=" + DataBase dim da as OleDbDataAdapter da = new OleDbDataAdapter("Select * From grade",ConnStr) dim ds as DataSet = new DataSet() da.Fill(ds,"grade") DataGrid1.DataSource = ds.Tables("grade").DefaultView DataGrid1.DataBind() End Sub </script>

  27. 实现分页的数字显示 <asp:DataGrid id="DataGrid1" runat="server" BorderColor="Black" BorderEidth="1" GridLines="Both" CellPadding="3" CellSpacing="0" Font-Name="Verdana" Font-Size="8pt" Headerstyle-BackColor="#AAAADD" AlternatingItemStyle-BackColor="#eeeeee" AllowPaging="True" PageSize="5" PagerStyle-HorizontanAlign="Right" PagerStyle-Mode="NumericPages" /> </Form> </body> </html>

  28. 实现分页的数字显示

  29. 实验:网上购物数据库设计 • 实验目标: • 了解:数据库的基本概念。 • 熟悉:数据库表的设计的方法。 • 掌握:设计网上购物系统的数据库。

  30. 步骤1:建立数据库表 • 建立数据库表Category格式

  31. 建立数据表Products格式

  32. 利用DataGrid控件动态添加数据

  33. 使用DataGrid控件动态操作数据

  34. 本章总结 • DataSet对象 • DataView对象 • Repeater数据控件 • DataList数据控件 • DataGrid数据控件 • 网上购物数据库设计

More Related