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

时间:2018-06-29 15:49:31

标签: c# sql-server sqlconnection

我在C#中有一个名为SQLServerConnection的类,其中包含一个SqlConnection对象。该类使用SqlConnection实例连接到SQLServer。该类具有以下析构函数:

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

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

  

System.InvalidOperationException:“内部.Net Framework数据提供程序错误1。”

知道为什么会这样吗?如果我在主类中正常调用Close(),则可以正常工作,但只有在析构函数中完成时才会引发错误。

此外,在这样的析构函数中关闭连接是否是错误的做法?

1 个答案:

答案 0 :(得分:1)

似乎您想让您的类封装现成的SqlConnection类,因为它在SqlConnection中拥有dbConnection的一个实例,我认为这是一个字段在类实例上。

问题是SqlConnectionIDisposable。因此,如果您的班级希望在字段中保留该实例,则这意味着您的班级也应为IDisposable。从Microsoft的CodeAnalysis规则(实际上是规则1001)中,请参阅Types that own disposable fields should be disposable

您可能还想在该页面上注意以下行:

  

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