c# SQL何时/如何关闭连接

本文关键字:何关闭 连接 SQL 何时 | 更新日期: 2023-09-27 18:13:11

我使用的是以下代码:

public class SQLConnection : IConnection
{
    private SqlConnection _sqlConnection = null;
    //bunch of interface implementations for my project
    //the destructor
    ~SQLConnection()
    {
        if(_sqlConnection != null)
        {
            if(_sqlConnection.State == ConnectionState.Open)
            {
                _sqlConnection.Close();
            }
            _sqlConnection.Dispose();
        }
    }
}

这个工作很好,直到前一段时间,当我开始收到这个错误:内部。net框架数据提供程序错误1

在谷歌了一下之后,我发现了这个链接(警告部分),我想这就是发生在我身上的事情。我的类每次都在管理连接状态的打开和关闭,但现在看来我不能以这种方式管理它,有没有其他方法可以做到这一点,而不必去到我使用连接的每个函数并显式地调用connection.Close() ?

c# SQL何时/如何关闭连接

始终使用'using'来安全处置连接。

using(var _sqlConnection = new SqlConnection())
{
     //code here
     _sqlConnection.Open();
}

//Safely disposed.

此外,在c#代码中显式地使用析构函数永远都不是一个好主意,除非你有非托管代码。

当一个代码试图访问已经被垃圾收集的SQLConnection时,您可能会收到此错误。这通常会发生在像这样的情况

 SqlConnection sqlConn;
 using (var sqlConnection = new SqlConnection())
 {
    sqlConn = sqlConnection;
    sqlConnection.Open();
 }
 sqlConn.Close();

我知道这个例子看起来很傻,因为它过于简化了,但是当程序员倾向于在管理类之间共享连接对象时,这种情况经常发生。查找代码中最近的任何更改。也许您正在传递多个对象之间连接的实例。其中一个对象被垃圾收集,然后连接也被处理。