【发布时间】:2013-12-12 14:53:28
【问题描述】:
以下是来自SqlDataReader Class的声明
在使用 SqlDataReader 时,关联的 SqlConnection 正忙于为 SqlDataReader 服务,除了关闭 SqlConnection 之外,不能对它执行其他操作。
我的代码有一个打开的连接被两个不同的命令使用。其实有两种方法。第二种方法在while(reader.Read()) 循环中被调用。
我收到 间歇性 错误提示 - There is already an open DataReader associated with this Command which must be closed first。
但为什么它不总是抛出错误?
参考文献
- Default Result Set Processing and Multiple Active Result Sets
- SQL Server Connection Basics
- Regarding a small confusion about DataReader
【问题讨论】:
-
显示这些方法和相关代码。我认为这是一种竞争条件。但是为什么你使用相同的连接?在这两种方法中都使用
using-statement。 -
ResultRead 区域也不错:)
-
@Lijo:不要发布图片,而是发布文字。目前尚不清楚
ResultRead的含义是什么,如果它是显示所有参数的方法。您还显示了一个类DataAccessLayerBase,它没有在上面的代码中使用。 -
我相当肯定你最好废弃你的
DataAccessLayerBase-class。你是poaching on the Connection-Pool's territory吗? -
尝试在仍在返回数据的连接上执行命令是自找麻烦,即使它被允许。只是不要使用相同的连接。反复打开和关闭一个连接不会产生任何费用——连接池会注意重用以前关闭的连接。实际上,使用池要快得多,因为更少的连接意味着更少的锁定资源
标签: c# ado.net sqldatareader