如何在另一个SqlDataReader中实现SqlDataReader
我的问题是我有一个SqlDataReader。我正在发出while (reader.read()),在while循环中,我必须创建另一个SqlDataReader,以便从数据库读取。但我发现连接已经打开的例外情况。
那么解决我的问题最好的方法是什么呢?
编辑:
我正在使用clr创建我的存储过程。我试图将MultipleActiveResultSets=true;放在clr和项目的连接字符串中,当我在Server上测试我的存储过程时发生了一个异常:
System.InvalidOperationException:已经有一个与此命令相关联的开放DataReader,必须先关闭。
发布于 2010-03-01 12:50:12
您需要两个嵌套的数据读取器,这需要ADO.NET "MARS“特性-多个活动结果集。
这在(MultipleActiveResultSets=true;) 2.0中是可用的,并且需要在连接字符串中设置特定的ADO.NET:
Server=.\SQLEXPRESS;Database=master;Integrated Security=SSPI;
MultipleActiveResultSets=true;有关出色的讨论,请参阅此博客帖子。
一旦实现了这一点,您就应该能够在代码中的同一SqlDataReader上共享多个SqlConnection,并相互独立地使用它们。
UPDATE: this 博客帖子在这里提到在SQL环境中不能使用MARS特性:-(这样就不能在SQL存储的proc中工作.
发布于 2010-03-01 12:51:50
您遇到的问题是,您试图针对同一个db连接打开多个数据读取器。默认情况下,这将给您一个异常,因为它会说已经有一个与连接相关的异常-正如您已经看到的。
您可以使用MultipleActiveResultsets,从.NET 2.0和Server 2005开始,您可以在连接字符串中指定一个额外选项,以便通过添加以下内容对单个db连接启用多个活动结果集:
MultipleActiveResultSets=True;另一种方法是使用不同的连接来打开内部数据读取器。
甚至,也许可以重新考虑您的原始方法--也许有一种方法可以不使用嵌套的读取器。
https://stackoverflow.com/questions/2355801
复制相似问题