我正在清理我继承的旧.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还在那里打开吗?或者它是否自动收集垃圾,因为没有解决它?
我想不出一种调试和测试方法。如果有人有任何想法或建议会很棒。
答案 0 :(得分:4)
我相信它会被关闭,但直到垃圾收集器才会收到它,这可能不会持续很长时间......