如何在另一个 SqlDataReader
中实现一个 SqlDataReader
?
我的问题是我有一个 SqlDataReader
。我正在发出 while (reader.read())
并且在 while 循环内我必须创建另一个 SqlDataReader
以从数据库中读取。但是我收到关于连接已经打开的异常。
那么解决我的问题的最佳方法是什么?
编辑:
我正在使用 clr 创建我的存储过程。我试图将 MultipleActiveResultSets=true;
放在 clr 和项目的连接字符串中,当我
在 SQL Server 上测试了我的存储过程:
System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.
最佳答案
您需要有两个嵌套数据读取器,这需要 ADO.NET“MARS”功能 - 多个事件结果集。
这从 ADO.NET 2.0 开始可用,并且需要在连接字符串中进行特定设置(MultipleActiveResultSets=true;
):
Server=.\SQLEXPRESS;Database=master;Integrated Security=SSPI;
MultipleActiveResultSets=true;
查看此 blog post进行精彩的讨论。
一旦你有了这个,你应该能够在代码中的同一个 SqlConnection
上共享多个 SqlDataReader
,并且可以独立使用它们。
更新:这个 blog post here提到 MARS 功能在 SQL CLR 环境中不可用 :-( 所以这在 SQL CLR 存储过程中不起作用....
关于c# - SqlDataReader 内部的 SqlDataReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2355801/