【问题标题】:SqlDataReader: In this scenario, will the reader get closed?SqlDataReader:在这种情况下,阅读器会被关闭吗?
【发布时间】:2008-10-29 15:46:32
【问题描述】:

我正在清理我继承的旧 .NET 1.1 项目中的 DataReaders。

之前的开发人员对数据访问层进行了编码,使得大多数 DAL 方法都返回 SqlDataReaders(因此将其留给调用者来正确调用 .Close() 或 .Dispose() 方法)。

不过,我遇到了一种情况,调用者没有捕获返回的 SqlDataReader(因此没有正确处理它)。请看下面的代码:

数据存取方式:

Public Shared Function UpdateData() As SqlDataReader
   ...

   drSQL = cmdSQL.ExecuteReader(CommandBehavior.CloseConnection)

   Return drSQL

End Function

调用代码:

...
DataAccessLayer.UpdateData()
...

如您所见,调用方法没有接收/捕获返回的SqlDataReader。那么会发生什么?那个 SqlDataReader 还在那里并打开吗?或者它会自动收集垃圾,因为没有任何东西可以解决它?

我想不出调试和测试的方法。如果有人有任何想法或建议,那就太好了。

【问题讨论】:

    标签: dispose .net-1.1 sqldatareader datareader


    【解决方案1】:

    我相信它会关闭,但要等到垃圾收集器找到它,这可能不会持续很长时间......

    【讨论】:

    • 我认为您在这一点上是正确的。因为,我们添加了命令行为以在 SqlDataReader 对象关闭/释放时关闭连接,所以垃圾收集应该处理所有事情(无论何时发生)。
    • @[Jeffaxe]:我不会任由 GC 摆布。如果这种操作频繁发生,您可能会消耗连接池和其他资源。另外(从字面上阅读方法)如果只进行更新,则首先不需要数据读取器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多