代码之家  ›  专栏  ›  技术社区  ›  Jeffrey Harrington

在这种情况下,读卡器会关闭吗?

  •  2
  • Jeffrey Harrington  · 技术社区  · 16 年前

    我正在清理继承的旧.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还在外面打开吗?或者,它是否会自动得到垃圾收集,因为没有任何东西在处理它?

    我想不出调试和测试这个的方法。如果有人有什么好主意或建议的话。

    1 回复  |  直到 16 年前
        1
  •  4
  •   Steven A. Lowe    16 年前

    我相信它会被关闭,但直到垃圾回收站找到它,这可能不会很长时间…