ADO.NET DataReader对象简介

ADO.NET DataReader对象简介
作者: zyf0808 发表日期: 2006-03-30 08:43 文章属性: 原创 复制链接


DataReader 对象
如果我们利用 Command 对象所执行的命令是有传回数据的 Select 叙述,此时 Command 对象<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

会自动产生一个 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>")

<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> 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

GetValues 方法

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:\Inetpub\wwwroot\cr\ch05\MyWeb.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>

</Html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值