我正在清理继承的旧.NET 1.1项目中的数据阅读器。
前一个开发人员对数据访问层的编码方式使大多数DAL方法返回sqldatareaders(从而使调用者能够正确调用.close()或.dispose()方法)。
不过,我遇到了这样一种情况:调用者没有捕获返回的sqldatareader(因此没有正确地处理它)。请参见下面的代码:
数据访问方法:
Public Shared Function UpdateData() As SqlDataReader
...
drSQL = cmdSQL.ExecuteReader(CommandBehavior.CloseConnection)
Return drSQL
End Function
调用代码:
...
DataAccessLayer.UpdateData()
...
如您所见,调用方法不接收/捕获返回的sqldatareader。那会发生什么?那个sqldatareader还在外面打开吗?或者,它是否会自动得到垃圾收集,因为没有任何东西在处理它?
我想不出调试和测试这个的方法。如果有人有什么好主意或建议的话。