SqlDataReader:在这种情况下,读者会被关闭吗?

时间:2008-10-29 15:46:33

标签: dispose .net-1.1 sqldatareader datareader

我正在清理我继承的旧.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还在那里打开吗?或者它是否自动收集垃圾,因为没有解决它?

我想不出一种调试和测试方法。如果有人有任何想法或建议会很棒。

1 个答案:

答案 0 :(得分:4)

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