在 C# 中完成程序后,在类析构函数中关闭 SqlConnection 是否安全?



我在C#中有一个名为SQLServerConnection的类,它保存了一个SqlConnection对象。该类连接到具有SqlConnection实例的 SQLServer。该类具有如下析构函数:

~SQLServerConnection()
{
dbConnection.Close();
}

程序完成后,dbConnection.Close()将引发错误,并显示以下错误:

System.InvalidOperationException:"Internal .Net Framework Data Provider error 1。

知道为什么会这样吗?如果我在主类中正常调用Close(),这工作正常,但如果在析构函数中完成,只会抛出错误。

另外,像这样关闭析构函数中的连接是一种不好的做法吗?

看起来您希望您的类封装开箱即用的SqlConnection类,因为它在dbConnection中保存了一个SqlConnection实例,我假设它是类实例上的一个字段。

问题是SqlConnectionIDisposable.因此,如果您的类想要在字段中保存该实例,这意味着您的类也应该IDisposable。从 Microsoft 的代码分析规则(字面意思是规则 1001(中,请参阅拥有一次性字段的类型应该是一次性的。

您可能还想注意该页面上的一行说:

如果类不直接拥有任何非托管资源,则不应实现终结器。

最新更新