如果我们利用Command 对象所执行的命令是有传回数据的Select 叙述,此时Command 对象会自动产生一个DataReader 对象。DataReader 是我们写ASP.NET 网页的好朋友,因为我们常常会将数据源的数据取出后显示给使用者,这时候我们就可以使用DataReader 对象。我们就可以在执行Execute 方法时传入一个DataReader 型态的变量来接收。DataReader 对象很单纯的一次只读取一笔纪录,而且只能只读,所以效率很好而且可以降低网络负载。由于Command对象自动会产生DataReader 对象,所以我们只要宣告一个指到DataReader 对象的变量来接收即可,并不需要使用New 运算子来产生;另外要注意的是 DataReader 对象只能配合Command对象使用 ,而且DataReader 对象在操作的时候Connection 对象是保持联机的状态。
下列程序代码片段传回可以读取Members 数据表中所有的纪录的DataReader 对象:
Dim cmA As ADOCommand= New
ADOCommand("命令字符串","Provider=Microsoft.Jet.OLEDB.4.0;"
& "Data Source=C:\Inetpub\wwwroot\cr\ch05\MyWeb.mdb")
Dim drA as ADODataReader
cmA.ActiveConnection.Open()
cmA.CommandText="Select * From Members"
cmA.Execute(drA) |
当我们将DataReader 对象传入Execute 方法后,就可以使用DataReader 对象来读取数据了。
以下为DataReader 常用的属性:
属性 说明
FieldCount 只读,表示纪录中有多少字段
HasMoreResults 表示是否有多个结果,本属性和SQL Script 搭配使用。
HasMoreRows 只读,表示是否还有资料未读取
IsClosed 只读,表示DataReader 是否关闭
Item 只读,本对象是集合对象,以键值(Key)或索引值(Index)的方式取得纪录中某个字段的数据
RowFetchCount 用来设定一次取回多少笔记录,预设为值为1 笔
了解DataReader 对象有什么属性后,我们就可以利用DataReader 所提供的方法来取回资料了。
下表为DataReader 常用的方法:
方法 说明
Close 将DataReader 对象关闭
GetDataTypeName 取得指定字段的数据型态
GetName 取得指定字段的字段名称
GetOrdinal 取得指定字段名称在纪录中的顺序
GetValue 取得指定字段的数据
GetValues 取得全部字段的数据
IsNull 用来判断字段内是否为Null 值
NextResult 用来和SQL Script 搭配使用,表示取得下一个结果
Read 让DataReader 读取下一笔记录,如果有读到数据则传回True,若没有纪录则传回False
Read 方法
在取得Command 对象执行Execute 方法所产生的DataReader 对象后,我们就可以将纪录中
的数据取出使用。DataReader 一开始并没有取回任何数据,所以我们要先使用Read 方法让
DataReader 先读取一笔数据回来。如果DataReader 对象成功取得数据则传回True,若没有取
得资料则传回False。这样一来我们就可以利用Do While...Loop 循环来取得所有的数据,如下
程序所示:
Do While drA.Read()
Response.Write("User Id: " & drA.Item("UserId") & ", Password: ")
Response.Write(drA.Item(1) & " ")
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) & " ")
Loop |
[1]
【责编:michael】
--------------------next---------------------