析构函数中调用SqlConnection对象的Dispose()方法就会出现这个异常,但是在其他地方不会。搜索MSDN的资源可以找到答案:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=473449&SiteID=1
以下是关于SqlDataReader.CLose()方法的解释:
http://msdn2.microsoft.com/en-us/library/system.da
ta.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 on
ly 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内部会有独立的线程。
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=473449&SiteID=1
以下是关于SqlDataReader.CLose()方法的解释:
http://msdn2.microsoft.com/en-us/library/system.da
注意这段文字:
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 on
不要再析构函数中调用Connection, DataReader,或其他托管对象的Close()或Dispose()方法,析构函数中应当只是放类的非托管成员,如果类中不包含非托管成员不要创建析构函数。
这类问题通常由于跨线程访问了非线程安全的对象,即便你没有显示声明一个线程,但是CLR内部会有独立的线程。