簡體   English   中英

C#SQL何時/如何關閉連接?

[英]C# SQL when/how do I close the connection?

我正在使用此代碼:

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 Framework數據提供程序錯誤1

仔細搜索之后,我發現了此鏈接 (“警告”部分),我認為這就是我正在發生的事情。 我的班級每次都在管理連接狀態的打開和關閉,但是現在看來我無法用這種方式進行管理,還有其他方法可以做到這一點,而不必轉到使用該連接的每個函數,並且顯式地調用connection.Close()嗎?

始終使用“使用”來安全處置連接。

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();

我知道這個示例由於過於簡化而顯得很愚蠢,但是它經常發生在程序員傾向於在管理類之間共享連接對象時。 查找您的代碼中最近的更改。 也許您正在傳遞多個對象之間的連接實例。 這些對象之一將被回收,然后連接也將被丟棄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM