340 likes | 457 Views
第 5 章 数据库的访问和管理( 4 ). 1. 2. 内容回顾. 使用 Command 对象 实现模糊查询 ADO.NET 事务处理 DataReader 对象 DataAdapter 对象. 内容提要. DataSet 对象 DataView 对象 Repeater 数据控件 DataList 数据控件 DataGrid 数据控件 网上购物数据库设计. DataSet 对象.
E N D
第5章 数据库的访问和管理(4) 1 2
内容回顾 • 使用Command对象 • 实现模糊查询 • ADO.NET事务处理 • DataReader对象 • DataAdapter对象
内容提要 • DataSet对象 • DataView对象 • Repeater数据控件 • DataList数据控件 • DataGrid数据控件 • 网上购物数据库设计
DataSet对象 • DataSet封装在命名空间“Syste.Data”中。DataSet中可以包含任意数量的DataTable(数据表),且每个DataTable对应一个数据库中的数据表和视图。 • 通过DataAdapter的Fill方法,将表内容填充到DataSet对象中,而且可以填充多个表。利用别名来区分。 • 比如“da.Fill(ds,"grade1");”的功能是将da对象中的数据填充到ds对象中,并起别名“grade1” • DataSet对象使用XML格式来存储数据,DataSet可以脱离数据源。可以利用程序创建DataSet对象,并填充内部的数据,不从数据源读取数据。
自动生成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"/>
自动生成DataSet对象 • 程序中,首先创建1个DataSet对象,然后创建1个DataTable对象,利用循环初始化DataTable对象 • 最后将DataTable对象填充到DataSet对象中,通过和DataGrid数据控件绑定将数据输出到浏览器上。
操作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"/>
动态修改DataSet对象 • 程序从数据库中读取了1个数据库表,将其填充到DataSet对象中,然后新创建一行 • 将其添加到DataSet对象中。“OleDbCommandBuilder cb = new OleDbCommandBuilder(da)”的功能是对新加的数据行进行转换。
DataView对象 • DataView对象定义了DataTable的数据查看方式。 • 数据默认的查看方式是将数据以表格的形式排列,且数据排列的顺序遵循从数据库表中取出数据时排列的顺序 • 可以通过DataView对象使数据按照某些规则进行显示。
使用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"/>
DataView对象 • 通过DataView对象的“Find()”方法可以其数据进行查找 • 如果找到了,该方法将返回所在行的索引,可以将查找到的数据输出。
程序名称: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"/>
数据控件 • 数据控件属于Web服务器端控件,数据控件包括三个控件: • Repeater控件,DataList控件和DataGrid控件。 • 其中最常用的数据控件是DataGrid控件,也是功能最强大的数据控件。
Repeater数据控件 • Repeater控件的主要功能是以更自由的方式来控制数据,用非表格的形式来展现数据。Repeater控件最关键的部分是摸板,允许用户定义5种摸板: • ItemTemplate,数据摸板,这是Repeater控件必须的 • AlternatingItemTemplate,隔行数据模板,可选参数 • SeparatorTemplate,分割线模板,可选参数 • HeaderTemplate,抬头模板,可选参数 • FooterTemplate,结尾模板,可选参数
使用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>
使用Repeater控件的其他模板 • 除了可以使用“ItemTemplate”模板,还可以使用头摸板、尾摸板以及隔行显示模板。 • 一般隔行显示模板用来定义不同的显示样式
程序名称: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>
Repeater控件 • 程序定义了头部显示的信息和尾部显示的信息 • 并定义奇数行显示成红色,偶数行显示成蓝色。
DataList数据控件 • DataList数据控件在Repeater数据控件基础上进行了扩展,除了含有Repeater的功能外,还可以设置单行笔数等等。 • DataList控件和Repeater控件数据输出的格式都取决于样板的定义,不同点是:DataList在浏览器中会以表格的形式输出。
程序名称: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>
DataGrid数据控件 • DataGrid数据控件是这3个数据控件中最强大的一个。使用DataGrid控件可以自动显示表的内容。利用DataReader对象或者DataSet对象和DataGrid控件进行绑定,就可以进行数据输出。 • 在以往的Web技术中,比如ASP或者JSP,实现数据的分页显示,需要编写很长的代码才能实现。在ASP.NET中利用DataGrid控件,只要做一下设置,就可以实现分页。
使用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"
使用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>
使用DataGrid控件实现分页 • 与分页相关的属性如下: • AllowPaging:是指其值设为“True”时才允许翻页,所以其具有分页浏览的功能; • PageSize:表示一页显示的记录行数,默认是10条记录; • PagerStyle-HorizontanAlign:指分页显示的定位,默认是Left。
使用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>
实现分页的数字显示 程序名称: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>
实现分页的数字显示 <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>
实验:网上购物数据库设计 • 实验目标: • 了解:数据库的基本概念。 • 熟悉:数据库表的设计的方法。 • 掌握:设计网上购物系统的数据库。
步骤1:建立数据库表 • 建立数据库表Category格式
本章总结 • DataSet对象 • DataView对象 • Repeater数据控件 • DataList数据控件 • DataGrid数据控件 • 网上购物数据库设计