我在C#中有一个名为SQLServerConnection
的类,其中包含一个SqlConnection
对象。该类使用SqlConnection
实例连接到SQLServer。该类具有以下析构函数:
~SQLServerConnection()
{
dbConnection.Close();
}
程序完成后,会在dbConnection.Close()
处引发错误,并显示以下错误:
System.InvalidOperationException:“内部.Net Framework数据提供程序错误1。”
知道为什么会这样吗?如果我在主类中正常调用Close()
,则可以正常工作,但只有在析构函数中完成时才会引发错误。
此外,在这样的析构函数中关闭连接是否是错误的做法?
答案 0 :(得分:1)
似乎您想让您的类封装现成的SqlConnection
类,因为它在SqlConnection
中拥有dbConnection
的一个实例,我认为这是一个字段在类实例上。
问题是SqlConnection
是IDisposable
。因此,如果您的班级希望在字段中保留该实例,则这意味着您的班级也应为IDisposable
。从Microsoft的CodeAnalysis规则(实际上是规则1001)中,请参阅Types that own disposable fields should be disposable。
您可能还想在该页面上注意以下行:
如果该类不直接拥有任何非托管资源,则不应实现终结器。