如何实现访问多个ADO.NET结果集

开发 后端
在编程中结果集是很麻烦的事,文章这里详细的介绍了ADO.NET结果集的处理,希望对大家有帮助。

ADO.NET还是比较常用的,于是我研究了一下ADO.NET,在这里拿出来和大家分享一下,希望对大家有用。根据查询的语法,你可以返回多个结果集。缺省情况下,data reader是位于***个结果集上的。你可以用Read方法在当前结果集中滚动查看记录。在找到***一个记录时,Read方法返回false,不再继续读取。你应该用NextResult方法转移到下一个结果集。如果没有更多的需要读的ADO.NET结果集了,那么该方法返回false。下面的代码说明了如何在所有返回的结果集中访问所有的记录:

  1. Dim reader As SqlDataReader  
  2. cmd.Connection.Open()  
  3. reader = cmd.ExecuteReader()  
  4. Do  
  5. ' Move through the first resultset  
  6. While reader.Read()  
  7. ' Access the row  
  8. End While  
  9. Loop While reader.NextResult()  
  10. reader.Close()  
  11. cmd.Connection.Close() 

#T#当你读一个行的内容时,可以通过索引或名称来识别列。运用索引可以更快,因为提供者可以直接进入到缓冲器中。如果你指定列名,提供者就用GetOrdinal方法将名称转换成相应的索引,然后执行基于索引的访问。注意,对于SQL Server data reader来说,所有的GetXXX方法实际上都调用了相应的GetSqlXXX方法。对于Oracle data reader来说,情况是类似的,本地数据总是被写进.NET Framework类型中。OracleDataReader类为它自己的内部类型提供了一组私有的GetXXX方法。这些方法包括 GetOracleBFile、GetOracleBinary和GetOracleDateTime等。相反,OLE DB和ODBC readers只有单独的一组get方法。

.NET Framework 1.1版通过添加方法HasRows扩展了data readers的编程接口,该方法返回一个Boolean值来说明是否有很多行需要读。(这是ASP.NET 1.0的一个不足之处。)然而,该方法并没有告诉我们有效的行的数量。同样,也没有方法或技巧使我们提前知道已经返回了多少结果集。

在Oracle数据库编程中,一个查询或一个存储过程返回的多个结果集是通过多个REF CURSOR对象处理的。有多少结果集,你就必须将多少输出参数同命令关联起来,以便NextResult方法可以用于Oracle数据库。在命令文本中,一个ADO.NET结果集同一个Oracle REF CURSOR是一致的。输出参数名必须与指针名匹配,它们的类型必须是OracleType.Cursor。例如,如果要运行的存储过程(或命令文本)引用了两个指针(Employees和Orders),那么下面的代码就说明了如何进行设置以返回两个ADO.NET结果集:

  1. Dim p1 As OracleParameter  
  2. p1 = cmd.Parameters.Add("Employees", OracleType.Cursor)  
  3. p1.Direction = ParameterDirection.Output  
  4. Dim p2 As OracleParameter  
  5. p2 = cmd.Parameters.Add("Orders", OracleType.Cursor)  
  6. p2.Direction = ParameterDirection.Output 

在上面的代码中,cmd是一个OracleCommand对象,它指向一个命令或一个存储过程。它执行代码,创建了两个REF CURSOR,称为Employees和Orders。REF CURSOR的名称和ADO.NET输出参数的名称必须匹配。

ADO.NET对象模式包含两个主要的部分——托管提供者和database-agnostic的容器类,如DataSet。托管提供者是数据源连接器的新类型;它们代替了基于COM的OLE DB提供者。到我写这篇文章时为止,只有少数几个托管提供者来连接商业DBMS。.NET Framework 1.1版只包含几个本地提供者——用于SQL Server、Oracle和所有OLE DB的提供者和ODBC驱动程序。第三方的供应商也支持MySQL并为Oracle提供了可供选择的提供者。

责任编辑:田树 来源: 博客
相关推荐

2009-11-13 10:42:09

ADO.NET Nex

2009-08-20 16:07:39

C#和ADO.NET访

2009-11-13 09:45:54

ADO.NET程序集

2009-11-11 15:09:35

ADO.NET数据集

2009-11-13 09:53:47

ADO.NET权限集

2009-12-21 16:53:06

ADO.NET使用说明

2011-05-20 15:45:52

数据集

2009-12-25 16:36:43

ADO.NET数据集

2009-12-30 14:59:42

ADO.NET数据集

2009-11-13 10:01:50

ADO.NET CAS

2009-11-04 17:22:30

ADO.NET数据访问

2009-12-28 14:54:48

ADO.NET语句

2009-11-11 13:59:15

ADO.NET与ADO

2009-10-29 10:10:10

ADO.NET数据集类

2009-12-23 17:54:01

ADO.NET 2.0

2009-12-29 13:57:30

访问ADO.NET

2009-10-29 10:00:53

ADO.NET数据集

2009-12-29 14:41:13

ADO.NET 数据集

2009-12-31 09:54:04

ADO.NET数据访问

2009-12-22 16:23:26

ADO.NET访问
点赞
收藏

51CTO技术栈公众号