C# SqlDataReader内部的SqlDataReader
如何在另一个C# SqlDataReader内部的SqlDataReader,c#,sql-server,sqldatareader,C#,Sql Server,Sqldatareader,如何在另一个SqlDataReader中实现SqlDataReader 我的问题是我有一个SqlDataReader。我正在发出while(reader.read()),在while循环中,我必须创建另一个SqlDataReader来读取数据库。但我得到了关于连接已经打开的例外 那么,解决我的问题最好的方法是什么 编辑: 我正在使用clr创建存储过程。我试图将MultipleActiveResultSets=true,当我 在SQL Server上测试了我的存储过程: System.Invali
SqlDataReader
中实现SqlDataReader
我的问题是我有一个SqlDataReader
。我正在发出while(reader.read())
,在while循环中,我必须创建另一个SqlDataReader
来读取数据库。但我得到了关于连接已经打开的例外
那么,解决我的问题最好的方法是什么
编辑:
我正在使用clr创建存储过程。我试图将MultipleActiveResultSets=true,当我
在SQL Server上测试了我的存储过程:
System.InvalidOperationException:已存在与此命令关联的打开的DataReader,必须先关闭该DataReader
您需要有两个嵌套的数据读取器,这需要ADO.NET“MARS”功能—多个活动结果集
这从ADO.NET 2.0开始提供,并且需要连接字符串中的特定设置(MultipleActiveResultSets=true;
):
Server=.\SQLEXPRESS;Database=master;Integrated Security=SSPI;
MultipleActiveResultSets=true;
请看下面的精彩讨论
一旦有了这个功能,您应该能够在代码中的同一个SqlConnection
上共享多个SqlDataReader
,并独立使用它们
更新:这提到了MARS功能在SQL CLR环境中不可用:-(因此,这在SQL CLR存储过程中不起作用…您遇到的问题是,您正试图针对同一个db连接打开多个数据读取器。默认情况下,这会给您一个异常,因为它会说已经有一个与该连接相关联的数据读取器-如您所见
您可以利用,从.NET 2.0和SQL Server 2005开始,您可以在连接字符串中指定一个额外选项,通过添加以下内容来针对单个db连接启用多个活动结果集:
MultipleActiveResultSets=True;
另一种方法是使用不同的连接打开内部数据读取器
甚至,可能会重新考虑您原来的方法-也许有一种方法可以不用嵌套读卡器来实现。您是否使用与以前的SqlDataReader相同的连接?您是否尝试过创建一个新的连接?是的,当然。我尝试过创建一个新的连接,问题是我使用的是clr,它在部署时工作,但在使用存储pro时工作cedure在我的应用程序中出现异常…是的,它肯定应该发生(只要它们使用相同的连接,例如相同的连接字符串-相同到最后一个逗号和空格!)使用clr时,它不起作用。在我创建存储过程后,我尝试在MS-SQL上对其进行测试,出现了一个exepction,该exepction声明:System.InvalidoOperationException:已经有一个打开的DataReader与此命令关联,必须先关闭。@scatman:是的,很遗憾,这似乎不受支持-请参阅我的更新…对不起