搜索MSDN的資源能夠找到答案: sql
原文以下
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=473449&SiteID=1
如下是關於SqlDataReader.CLose()方法的解釋:
http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close.aspx
注意這段文字:
Do not call Close or Dispose on a Connection, a DataReader, or any other managed object in the Finalize method of your class. In a finalizer, you should only release unmanaged resources that your class owns directly. If your class does not own any unmanaged resources, do not include a Finalize method in your class definition. (不要再析構函數中調用Connection, DataReader,或其餘託管對象的Close()或Dispose()方法,析構函數中應當只是放類的非託管成員,若是類中不包含非託管成員不要建立析構函數。)安全
這類問題一般因爲跨線程訪問了非線程安全的對象,即使你沒有顯示聲明一個線程,可是CLR內部會有獨立的線程。函數
建議直接實現 IDisposable 接口並在使用完對象以後調用Dispose方法便可(須要釋放的對象本身要在Dispose方法中實現)線程