对于 DataTable中的每一个Row,它都可能有三种状态: Original、 Current、 Preposed。 Original状态是指当数据第一次被加入到数据表中时候的状态。 Current态指经过多次改变 Original数据后得到的Row。 Preposed态存在于一个相当短暂的时期,它是由 original态过 渡到 Current态时的中间状态,一个明显的例子是对数据进行修改而尚未完成时,开始是 Original态,完成后是 Current态,而这之间就是 Preposed态。 为了说明对表中数据的使用,我们来看下面一个例子它是对 workTable按每一个字段进 行遍历,并把字段名和内容显示出来。 Dim Curr Rows( As DataRow workTable Select(Nothing, Nothing, System Data. Data ViewRowState Current Rows) 对 work Table数据集合选择有效的 Datarows放入 Curr Rows数组 Dim list As String= System. String. Empty ‘清空list字符串 Dim RowNo As Intege Dim ColNo as integer For rowno=o to curr rows count 每一条记录的循环 For Colno =o To work Table Columns. Count 一条记录中每一个字段的循环 list & work Table Columns( colNo). ColumnName &"=" CurrRows( RowNo)( ColNo). ToString Console. WriteLine(list) Next Next If Curr Rows. Count I Then Console. Writeline("No Current Rows Found") 从上面的例子我们可以看出,对Rows集合使用 Data Table的 Select方法可以找出有效的Rows 集合,然后根据 Rows. count和 columns. count可以确定有效的记录数和字段数,最后利用记 录索引值和列索引值可以唯一确定数据表中的任何数据。 3.3.4 DataReader的使用方法
对于 DataTable 中的每一个 Row,它都可能有三种状态:Original、Current、Preposed。 Original 状态是指当数据第一次被加入到数据表中时候的状态。Current 态指经过多次改变 Original 数据后得到的 Row。Preposed 态存在于一个相当短暂的时期,它是由 original 态过 渡到 Current 态时的中间状态,一个明显的例子是对数据进行修改而尚未完成时,开始是 Original 态,完成后是 Current 态,而这之间就是 Preposed 态。 为了说明对表中数据的使用,我们来看下面一个例子,它是对 workTable 按每一个字段进 行遍历,并把字段名和内容显示出来。 Dim CurrRows() As DataRow = workTable.Select(Nothing, Nothing, _ System.Data.DataViewRowState.CurrentRows) ‘对 workTable 数据集合选择有效的 DataRows 放入 CurrRows 数组 Dim list As String = System.String.Empty ‘清空 list 字符串 Dim RowNo As Integer Dim ColNo As Integer For RowNo = 0 to CurrRows.Count – 1 ‘每一条记录的循环 For ColNo = 0 To workTable.Columns.Count – 1 ‘一条记录中每一个字段的循环 list = "" list &= workTable.Columns(colNo).ColumnName & " = " & _ CurrRows(RowNo)(ColNo).ToString Console.WriteLine(list) Next Next If CurrRows.Count < 1 Then Console.WriteLine("No CurrentRows Found") 从上面的例子我们可以看出,对Rows集合使用DataTable的Select方法可以找出有效的Rows 集合,然后根据 Rows.count 和 columns.count 可以确定有效的记录数和字段数,最后利用记 录索引值和列索引值可以唯一确定数据表中的任何数据。 3.3.4 DataReader 的使用方法
334 I Read方法 熟悉 Recordset的读者一定在想,如何对一个 Dataset中的每一个记录进行操作呢?这就 不得不提到 ADO. NET的 DataReader对象了。我们来看看下面的例子 <%(@import namespace="system. data. SQL"%> script language="vb"runat="server"> Sub Page Load( sender As Object, e As Event Args) Dim sql Text as String="select* from authors Dim csTring as string="serverlocalhost; uid=sa pwd= database=pubs Dim drEad AS SQLDatareader Dim sqlcmd As sQLCommand sqlCmd =New SQLCommand(sql Text, cn String) sqlCmd ActiveConnection. Open qlCmd. execute(bread) hile brEad. Reado response. write("<br>& brEad. Item("au Iname")) End while End Sub 还记得 Recordset的 MoveNext和 Record set的EOF吗?为了对 Recordset的每一条记录 进行操作,我们需要首先调用其 MoveNext方法移动记录,然后判断是否已经到了记录集合 的末尾。 在 ADO. NET中,一切变得更加简单了。 DataReder的Read方法自动移动记录到下一条,并 返回移动是否成功的信息。相信使用过 Iterator对象的读者一定很喜欢这样的操作方法吧。 另外,上面的代码中,我们并没有显式创建 SQLConnection对象。我们把连接字符串传递给 SQLCommand,通过 sqlCmd Active Connection Open0创建了到数据库的链路。 上面代码的执行结果如下图
3.3.4.1Read 方法 熟悉 Recordset 的读者一定在想,如何对一个 Dataset 中的每一个记录进行操作呢?这就 不得不提到 ADO.NET 的 DataReader 对象了。我们来看看下面的例子: <%@import namespace="system.data.SQL"%> <script language="vb" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim sqlText as String = "select * from authors" Dim cnString as string = "server=localhost;uid=sa;pwd=;database=pubs;" Dim dbRead AS SQLDataReader Dim sqlCmd AS SQLCommand sqlCmd = New SQLCommand(sqlText,cnString) sqlCmd.ActiveConnection.Open() sqlCmd.execute(dbread) while dbRead.Read() response.write("<br>" & dbRead.Item("au_lname")) End while End Sub </script> 还记得 Recordset 的 MoveNext 和 Recordset 的 EOF 吗?为了对 Recordset 的每一条记录 进行操作,我们需要首先调用其 MoveNext 方法移动记录,然后判断是否已经到了记录集合 的末尾。 在 ADO.NET 中,一切变得更加简单了。DataReder 的 Read 方法自动移动记录到下一条,并 返回移动是否成功的信息。相信使用过 Iterator 对象的读者一定很喜欢这样的操作方法吧。 另外,上面的代码中,我们并没有显式创建 SQLConnection 对象。我们把连接字符串传递给 SQLCommand,通过 sqlCmd.ActiveConnection.Open()创建了到数据库的链路。 上面代码的执行结果如下图:
aReadDatal!!-Microsoft Internet Explorer Eile Edit View Favorites Tools Help t Back ③剑 Search FAvorites(htoy 贺禧 reen Carson 特萨 Straight Bennet ②]Dne Local intranet 3342更复杂的Read 下面代码演示了利用 DataReader生成两个下拉列表的的情况。 <%(@import namespace="system. data. SQL"%> <SCRIPT LANGUAGE=vb"RUNAT="server"> Sub Page Load(my List As Object, E as EventArgs) If Not Page. IsPostBacko Dim db Read As SQLData Reader Dim db Comm AS SQLCommand Dim strConn As String Dim SQL AS String strConn="server=sql database. com uid=forman; password=foopwd SQL="Select* from Color ORDER BY Color dbComm= New SQLCommand(SQL, strConn) dbComm ActiveConnection Open dbComm. execute(brEad) While brEad. Reado ShirtColorOptions. items. add(New Listitem(dbRead Item("Color")) End while SQL="Select* from Size ORDER BY Size
3.3.4.2 更复杂的 Read 下面代码演示了利用 DataReader 生成两个下拉列表的的情况。 <%@import namespace="system.data.SQL"%> <SCRIPT LANGUAGE="vb" RUNAT="server"> Sub Page_Load(myList AS Object,E as EventArgs) If Not Page.IsPostBack() Dim dbRead AS SQLDataReader Dim dbComm AS SQLCommand Dim strConn AS String Dim SQL AS String strConn = "server=sql.database.com;uid=fooman;password=foopwd;" SQL = "Select * from Color ORDER BY Color" dbComm = New SQLCommand(SQL,strConn) dbComm.ActiveConnection.Open() dbComm.execute(dbRead) While dbRead.Read() ShirtColorOptions.items.add(New ListItem(dbRead.Item("Color"))) End While SQL = "Select * from Size ORDER BY Size
dbComm= New SQLCommand(sQL, str Conn) dbComm. execute(brEad) While brEad. Reado Shirtsizeoptions. items. add(New Listitem(dbRead Item("Size")) End While End IF End sub <SCRIPT> <FORM RUNAT"server"method="get"> <asp DropDownList id="shirt ColorOptions"runat="server"Data Text Field="URL/> <asp: Drop DownList id="shirtSizeOptions"runat="server"DataTextField="Size"/ <FORM> 执行结果 Shirt color. aqua Site Options: Large 3343把 Data reader绑定到 Data grid 下面的例子是基于 NET Framework Beta2的。 <% Import Namespace="System. Data"%0> <%(@ Import Namespace="System. Data. SQL"% Dim myConn As SQLConnection=new SQLConnection("server=localhost; uid=sa, pwd= database=North Wind; " Dim my Command As SQLCommand =new SQLCommand ( "select from cusotmers", my Conn) my Conn. Open cusotmers. Data Source= my Command. Execute cusotmers. DataBindo my Conn. Close <HTML> <BODY> <asp Data Grid id="cusotmers"runat="server"/
dbComm = New SQLCommand(SQL,strConn) dbComm.ActiveConnection.Open() dbComm.execute(dbRead) While dbRead.Read() ShirtSizeOptions.items.add(New ListItem(dbRead.Item("Size"))) End While End IF End Sub </SCRIPT> <FORM RUNAT="server" method="get"> <asp:DropDownList id="shirtColorOptions" runat="server"DataTextField = "URL"/> <asp:DropDownList id="shirtSizeOptions" runat="server" DataTextField = "Size"/> </FORM> 执行结果: 3.3.4.3 把 DataReader 绑定到 DataGrid 下面的例子是基于 NET Framework Beta2 的。 <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SQL" %> <% Dim myConn As SQLConnection = new SQLConnection("server=localhost;uid=sa;pwd=;database=NorthWind;") Dim myCommand As SQLCommand = new SQLCommand("select * from cusotmers",myConn) myConn.Open() cusotmers.DataSource = myCommand.Execute() cusotmers.DataBind() myConn.Close() %> <HTML> <BODY> <asp:DataGrid id="cusotmers" runat="server"/>
<BODY> <HTML> 3.3.44利用 DataReader插入记录 <SCRIPT LANGUAGE=vb" RUNAT="server> Sub showDbo %@import namespace="system. data. SQL"%> Dim brEad AS SQLDataReader Dim db Comm AS SQLCommand Dim str Conn as strin Dim strSQL AS String strConn="server=my sql database; uid-fooname password=foofoo, ISQL="INSERT INTO my Database(db Value]) VaLUES(the thing)" db Comm= New SQLCommand( strSQL, strConn) db Comm Active Connection Open dbComm. execute( brEad) End Sub <SCRIPT> 335小结 本章对在 ADO NET中如何和远端数据库相连作了进一步的阐述。和数据库相连, ADO NET提供了三种方式,1)通过ODBC相连2)通过 OLEDB相连3)直接和 SQL Server 相连。三种方式由于应用层次的差异,效率由低到高,独立性由高到低。对于相连数据库的 数据处理,也有两种方式。一种是通过 DataSet来隔离异构的数据源,另一种是以流方式从 数据源读取( DataReader方式)
</BODY> </HTML> 3.3.4.4 利用 DataReader 插入记录 <SCRIPT LANGUAGE="vb" RUNAT="server"> Sub showDb() <%@import namespace="system.data.SQL"%> Dim dbRead AS SQLDataReader Dim dbComm AS SQLCommand Dim strConn AS String Dim strSQL AS String strConn= "server=my.sql.database;uid=fooname;password=foofoo;" strSQL = "INSERT INTO myDatabase (dbValue1) VALUES('the thing')" dbComm = New SQLCommand(strSQL, strConn) dbComm.ActiveConnection.Open() dbComm.execute(dbRead) End Sub </SCRIPT> 3.3.5 小结 本章对在 ADO.NET 中如何和远端数据库相连作了进一步的阐述。和数据库相连, ADO.NET 提供了三种方式,1)通过 ODBC 相连 2)通过 OLEDB 相连 3)直接和 SQL Server 相连。三种方式由于应用层次的差异,效率由低到高,独立性由高到低。对于相连数据库的 数据处理,也有两种方式。一种是通过 DataSet 来隔离异构的数据源,另一种是以流方式从 数据源读取(DataReader 方式)