我在C#中有一个名为SQLServerConnection
的类,它保存了一个SqlConnection
对象。该类连接到具有SqlConnection
实例的 SQLServer。该类具有如下析构函数:
~SQLServerConnection()
{
dbConnection.Close();
}
程序完成后,dbConnection.Close()
将引发错误,并显示以下错误:
System.InvalidOperationException:"Internal .Net Framework Data Provider error 1。
知道为什么会这样吗?如果我在主类中正常调用Close()
,这工作正常,但如果在析构函数中完成,只会抛出错误。
另外,像这样关闭析构函数中的连接是一种不好的做法吗?
看起来您希望您的类封装开箱即用的SqlConnection
类,因为它在dbConnection
中保存了一个SqlConnection
实例,我假设它是类实例上的一个字段。
问题是SqlConnection
是IDisposable
.因此,如果您的类想要在字段中保存该实例,这意味着您的类也应该IDisposable
。从 Microsoft 的代码分析规则(字面意思是规则 1001(中,请参阅拥有一次性字段的类型应该是一次性的。
您可能还想注意该页面上的一行说:
如果类不直接拥有任何非托管资源,则不应实现终结器。