本篇内容介绍了“访问多个ADO.NET结果集的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
ADO.NET还是比较常用的,于是我研究了一下ADO.NET,在这里拿出来和大家分享一下,希望对大家有用。根据查询的语法,你可以返回多个结果集。缺省情况下,data reader是位于***个结果集上的。你可以用Read方法在当前结果集中滚动查看记录。在找到***一个记录时,Read方法返回false,不再继续读取。你应该用NextResult方法转移到下一个结果集。如果没有更多的需要读的ADO.NET结果集了,那么该方法返回false。下面的代码说明了如何在所有返回的结果集中访问所有的记录:
Dim reader As SqlDataReader cmd.Connection.Open() reader = cmd.ExecuteReader() Do ' Move through the first resultset While reader.Read() ' Access the row End While Loop While reader.NextResult() reader.Close() cmd.Connection.Close()
当你读一个行的内容时,可以通过索引或名称来识别列。运用索引可以更快,因为提供者可以直接进入到缓冲器中。如果你指定列名,提供者就用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结果集:
Dim p1 As OracleParameter p1 = cmd.Parameters.Add("Employees", OracleType.Cursor) p1.Direction = ParameterDirection.Output Dim p2 As OracleParameter p2 = cmd.Parameters.Add("Orders", OracleType.Cursor) 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提供了可供选择的提供者。
“访问多个ADO.NET结果集的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。