指引网

当前位置: 主页 > 编程开发 > .NET >

ADO.NET中的DataReader对象基础介绍

来源:网络 作者:佚名 点击: 时间:2017-11-17 03:44
[摘要] 如果我们利用Command 对象所执行的命令是有传回数据的Select 叙述,此时Command 对象会自动产生一个DataReader 对象。DataReader 是我们写ASP.NET 网页的好朋友,因为我们常常会将数据源的数据取出后显
  如果我们利用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) & "<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>")
Loop

 

------分隔线----------------------------