c# - SqlDataReader 内部的 SqlDataReader

标签 c# sql-server sqldatareader

如何在另一个 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/

相关文章:

c# - 将 sqldatareader 绑定(bind)到 gridview c#

c# - 尝试将给定 ID 与数据库中存储的 ID 进行比较

c# - 未优化的 MSIL 中多余的 NOP 和分支

c# - 为什么我的 bin 发布目录中有 System.*.* dll?

mysql - sql多对多关系只有2个表

sql-server - 使用参数化查询时 TVF 速度要慢得多

SqlDataReader/DbDataReader 实现问题

c# - .Net Standard 2.0 dll 的 .Net 45 序列化

c# - 使用数据库上下文时如何指定连接字符串

sql-server - 唯一约束的 SQL Server 筛选索引