在析构函数里关闭数据库连接时,第一次运行是不报错,刷新的时候报错如下:
Net Framework 数据提供程序错误 1
解决:问题是只要在A的析构函数中调用SqlConnection对象的Dispose()方法就会出现这个异常,但是在其他地方不会。搜索MSDN的资源可以找到答案:
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内部会有独立的线程。
建议:每次用完关闭。也可以用以下代码。
using (SqlConnection connection = new SqlConnection(connectionString))
{
///...