ADO.NET中DataReader对象基础介绍
点击次数:83 次 发布日期:2008-11-06 07:49:50 作者:源代码网
|
下列程序代码片段传回可以读取Members 数据表中所有的纪录的DataReader 对象: Dim cmA As ADOCommand= New ADOCommand("命令字符串","Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:Inetpubwwwrootcrch05MyWeb.mdb") Dim drA as ADODataReader cmA.ActiveConnection.Open() cmA.CommandText="Select * From Members" 软件开发网 www.mscto.com cmA.Execute(drA) 当我们将DataReader 对象传入Execute 方法后,就可以使用DataReader 对象来读取数据了。 以下为DataReader 常用的属性: 属性 说明 FieldCount 只读,表示纪录中有多少字段 HasMoreResults 表示是否有多个结果,本属性和SQL Script 搭配使用。 HasMoreRows 只读,表示是否还有资料未读取 IsClosed 只读,表示DataReader 是否关闭 Item 只读,本对象是集合对象,以键值(Key)或索引值(Index)的方式取得纪录中某个字段的数据 RowFetchCount 用来设定一次取回多少笔记录,预设为值为1 笔 了解DataReader 对象有什么属性后,我们就可以利用DataReader 所提供的方法来取回资料了。 下表为DataReader 常用的方法: 方法 说明 Close 将DataReader 对象关闭 软件开发网 www.mscto.com GetDataTypeName 取得指定字段的数据型态 GetName 取得指定字段的字段名称 GetOrdinal 取得指定字段名称在纪录中的顺序 GetValue 取得指定字段的数据 GetValues 取得全部字段的数据 IsNull 用来判断字段内是否为Null 值 NextResult 用来和SQL Script 搭配使用,表示取得下一个结果 Read 让DataReader 读取下一笔记录,如果有读到数据则传回True,若没有纪录则传回False Read 方法 在取得Command 对象执行Execute 方法所产生的DataReader 对象后,我们就可以将纪录中 的数据取出使用。DataReader 一开始并没有取回任何数据,所以我们要先使用Read 方法让 DataReader 先读取一笔数据回来。如果DataReader 对象成功取得数据则传回True,若没有取 软件开发网 www.mscto.com 得资料则传回False。这样一来我们就可以利用Do While...Loop 循环来取得所有的数据,如下 程序所示: Do While drA.Read() Response.Write("User Id: " & drA.Item("UserId") & ", Password: ") Response.Write(drA.Item(1) & "<br>") Loop 上述程序代码片段利用Read 方法将数据取回后,再利用Item 集合以键值(Key)的方式取出 UserId 字段的数据,以及利用索引值(Index)取得使用者UserPwd 字段的数据;索引值是由0 开始计数,故第一个字段的索引值为0,依此类推。当数据读取完毕后Read 方法会传回False, 所以就跳出循环。 GetValue 方法 我们也可以使用GetValue 方法取得指定字段内的记录,这个方法和Item 属性很像;不过 GetValue 方法的参数只接收索引值,并不接收键值为参数。我们改用GetValue 取得所有字段 内的数据,如下程序所示: Do While drA.Read() Response.Write("User Id: " & drA.GetValue(0) & ", Password: ") Response.Write(drA.GetValue(1) & "<br>") 软件开发网 www.mscto.com LoopGetValues 方法 GetValues 方法是取得字段内所有的记录。这个方法接收一个数组,并且将所有字段填入数组中,如下程序所示: Dim arValue(drA.FieldCount) drA.Read() "先抓取一笔记录 drA.GetValues(arValue) "将记录填入数组中 For shtI=0 To drA.FieldCount - 1 Response.Write(drA.GetValue(shtI) & "<br>") Next 因为索引值是由零开始算,所以我们在使用For...Next 循环的时候记得将结束值减一。 GetDataTypeName 以及GetName 方法 GetDataTypeName 方法可以传回指定字段的数据型态,而GetName 方法则是传回指定字段的 字段名称(就是键值)。这两个方法一样以键值或是索引的方式来指定字段。下列程序代码片段 显示每个字段的名称以及数据型态: Dim shtI As Short For shtI = 0 To drA.FieldCount - 1 Response.Write("索引值为 " & shtI.ToString & " 的字段, 名称为: " & _ DrA.GetName(shtI) & ", 数据型态: " & DrA.GetDataTypeName(shtI) & "<br>") Next Close 方法 Close 方法可以关闭DataReader 对象和数据源之间的联机。除非把DataReader 对象关闭,否 则当DataReader 对象尚未关闭时,DataReader 所使用的Connection 对象就无法执行其它的 动作。 综合范例 下列范例在文字输入盒内输入数据表名称,按下确定后程序会将数据表的索引、字段名称、字段 型态以及字段内容全部显示出来: <%@Import Namespace=System.Data.ADO%> <%@Import Namespace=System.Data%> <Html> <Form Id="F1" Runat="Server"> <Input Id="Text1" Runat="Server" Value="Members"/> <Button Id="Button1" OnServerClick="Button1_Click" Runat="Server">执行 </Button> </Form> <Script Language="VB" Runat="Server"> Sub Button1_Click(sender As Object, E As EventArgs) Dim cmA As ADOCommand=New _ ADOCommand("","Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:Inetpubwwwrootcrch05MyWeb.mdb") Dim drA As ADODataReader Dim shtI As Short cmA.ActiveConnection.Open() cmA.CommandType=CommandType.TableDirect cmA.CommandText=Text1.Value cmA.Execute(drA) For shtI=0 To drA.FieldCount - 1 Response.Write("字段索引值: " & shtI.ToString & _ " 字段名称: " & drA.GetName(shtI) & _ " 数据型态: " & drA.GetDataTypeName(shtI) & "<br>") Next Do While drA.Read() For shtI=0 To drA.FieldCount-1 Response.Write(drA.GetValue(shtI) & " / ") Next Response.Write("<br>") Loop End Sub </SCRIPT> 源代码网推荐 源代码网供稿. |
