DataReader 对象

如果我们利用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
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>

转载于:https://www.cnblogs.com/acker/archive/2011/05/11/2043295.html

ADO.NET DataReader对象简介相关推荐

  1. ADO.NET 核心对象简介

    ADO.NET ADO.NET是.NET中一组用于和数据源进行交互的面向对象类库,提供了数据访问的高层接口. ADO.NET类库在System.Data命名空间内,根据我们访问的不同数据库选择命名空间 ...

  2. ADO.NET Command对象简介

    Command 对象简介 Command 对象最主要的工作是透过Connection 对象对数据源下达操作数据库的命令. 我们以下列语法产生Command 对象: Dim cmA As Command ...

  3. ADO.NET中5大对象简介

    ADO.NET中5大对象简介 ADO.NET在以前的学习中接触过,并以应用过,但并没有好好的总结过.最近这段时间的学习又复习了这块的知识,下面就我现在所知道的总结归纳一下. ADO.NET是基于XML ...

  4. ADO.NET 常用对象(18)

    ADO.NET提供了从不同数据源访问数据的结构,在ADO.NET中数据访问可以分为三层 (如下图所示). 物理层数据存储:可以访问OLE数据库,SQLserver数据库 或者xml文件.即图中的各种数 ...

  5. ADO.NET Entity Framework 简介

    一直对EF都是一知半解的,没有系统的了解过EF有什么样的功能,有什么具体的好处.在接下来的文章中会详细介绍EF.以下是参考MSDN上的文章,翻译并加以自己的理解得出的. ADO.NET Entity  ...

  6. ADO.NET常用对象

    一.Connection对象 Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接.所有Connection对象的基类都是DbConnection类. Co ...

  7. [转载]服务数据对象简介

    服务数据对象简介 如果您认为 J2EE 编程模型和 API 迫使开发人员在特定于技术的配置.编程和调试上浪费了太多的时间,那么欢迎您阅读本文.很多 Java™ 开发人员都怀疑如何能以统一的方式访问异构 ...

  8. ADO内存数据对象SqlDataAdapter类使用SqlDataAdapter在数据库和DataSet之间架起桥梁:

    ADO内存数据对象SqlDataAdapter类使用SqlDataAdapter在数据库和DataSet之间架起桥梁: void UseDataAdapter() { //1 连接数据库 //2 创建 ...

  9. 大对象简介+大对象的4种类型+lob类型的优点+lob的组成

    大对象简介 1用来存储大型数据,如图片,视频,音乐等 2可用于存储二进制数据,字符数据,引用外部文件的指针的数据类型 大对象的4种类型 1BLOB数据类型 1)它是用来存储二进制数据. 2)可以存储的 ...

  10. Javascript Proxy对象 简介

    Javascript Proxy对象 简介 本文转载自:众成翻译 译者:eJayYoung 链接:http://www.zcfy.cc/article/4755 原文:https://blog.cam ...

最新文章

  1. maven选包算法(两个相同的包)
  2. Ubuntu16.04(64位)下面使用Doxygen+Graphviz分析python代码
  3. oracle mysql 透明网关_如何在Oracle中建立透明网关
  4. Java学习笔记基础(中)
  5. 嵌入式软件设计第7次实验报告
  6. 三维重建笔记_多视几何_求基本矩阵F_六/七/八点法_误差评估
  7. Java join()原理分析
  8. IntelliJ IDEA使用技巧(二)——添加jar包
  9. PetShop 4.0学习笔记:消息队列MSMQ
  10. MAC OS dmg文件转换为ISO
  11. 高分屏笔记本,如何处理程序提示“文本缩放比率要求为100%”
  12. 故障:在 Application Log 中出现 ID57860 的 Backup Exec 错误日志
  13. minidump详细介绍
  14. 手写vue日历控件过程
  15. Team Foundation Server 2013 with Update 3 Install LOG
  16. quicktime ogv_Windows的QuickTime已死,应卸载以确保安全
  17. 智慧工地安全施工实时监测系统解决方案
  18. HPM6750EVK 硬件通读与例程通跑 1
  19. clearcase命令指南
  20. uniapp小程序获取定位(高德SDK)

热门文章

  1. Zeppelie连接jdbc的使用
  2. 让块元素在同一行显示的方法: float 和inline-block
  3. DOM(一):节点层次-Node类型
  4. Windows2008 Server r2 64位显示桌面图标的方法
  5. Android TextView和EditText属性详解
  6. [转载]从零开始学习OpenGL ES之五 – 材质
  7. 在Javascript中实现类似C#中string.Format的功能
  8. Java编程基础阶段笔记 day03 Java基本语法(中)
  9. Java面试题中的Redis大合集,所有你想找的都在这里!
  10. HTML5+CSS把footer固定在底部