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

Post on 15-Jan-2016

97 Views

Category:

Documents

8 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

内容回顾 使用 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 integerfor i = 0 to 10

mydr = mydt.NewRow()mydr(" 数字 ") = imydr(" 平方 ") = i * imydt.Rows.Add(mydr)

nextdg.DataSource = myds.Tables("Squares").DefaultViewdg.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 DataRowrow = 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").DefaultViewdg.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 = CommConn.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 Ifdg.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 StringProvider = "Microsoft.Jet.OLEDB.4.0;"DataBase = Server.MapPath("person.mdb")ConnStr = "Provider=" + Provider + "Data Source=" + DataBasedim da as OleDbDataAdapterda = new OleDbDataAdapter("Select * From grade",ConnStr)dim ds as DataSet=new DataSet()da.Fill(ds,"grade")rep.DataSource=ds.Tables("grade").DefaultViewrep.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 stringProvider = "Microsoft.Jet.OLEDB.4.0;"DataBase = Server.MapPath("person.mdb")ConnStr = "Provider=" + Provider + "Data Source=" + DataBasedim Comm as new OleDbDataAdapter("Select * From grade",ConnStr)dim ds as new DataSet()Comm.Fill(ds,"grade")dl.DataSource = ds.Tables("grade").DefaultViewdl.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 StringProvider = "Microsoft.Jet.OLEDB.4.0;"DataBase = Server.MapPath("person.mdb")ConnStr = "Provider=" & Provider & "Data Source=" + DataBasedim da as OleDbDataAdapterda = new OleDbDataAdapter("Select * From grade",ConnStr)dim ds as DataSet = new DataSet()da.Fill(ds,"grade")DataGrid1.DataSource = ds.Tables("grade").DefaultViewDataGrid1.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 StringProvider = "Microsoft.Jet.OLEDB.4.0;"DataBase = Server.MapPath("person.mdb")ConnStr = "Provider=" & Provider & "Data Source=" + DataBasedim da as OleDbDataAdapterda = new OleDbDataAdapter("Select * From grade",ConnStr)dim ds as DataSet = new DataSet()da.Fill(ds,"grade")DataGrid1.DataSource = ds.Tables("grade").DefaultViewDataGrid1.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 格式

建立数据表 Products 格式

利用 DataGrid 控件动态添加数据

使用 DataGrid 控件动态操作数据

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

top related