Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SqlDataReader内部的SqlDataReader_C#_Sql Server_Sqldatareader - Fatal编程技术网

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:是的,很遗憾,这似乎不受支持-请参阅我的更新…对不起