这现在更多是出于好奇而非实际目的。如果您打开了一个 SqlConnection
并将一个 SqlDataReader
附加到它上面,然后尝试使用相同的 SqlConnection
运行另一个查询,那么它会抛出错误。我的问题是,SqlConnection
怎么知道有一个 reader 已经附加到它上面了。它没有公共属性或其他东西来表示是否具有 HasDataReader
,那么 SqlConnection
类是怎么知道的?
原始问题:(已不再相关)
嗨,我正在设置一个小型连接池,我们遇到的一个更常见的 bug(通常很容易修复,但我们却无法记住 reader.Close()
!)就是当一个连接被许多类/方法使用且一个方法打开了数据阅读器并忘记关闭它时。这不是真正的坏事,因为很多时候你只需要进入调试器,向上一级并查看之前的函数,检查它是否有未关闭的数据阅读器。
现在,这里有一个更大的问题。在这个连接池中,如果一个数据阅读器是打开的,则直到一个线程获取连接并尝试使用它之前,我们不知道是否有数据阅读器打开。最初打开数据阅读器的东西可能已经不存在了。
因此,简而言之,如何检测连接上是否有数据阅读器打开,是否有一种方法可以关闭 reader 而不关闭连接?