SqlConnection.Close 方法

定義

關閉了與資料庫的連線。 這是關閉任何開路連接的首選方法。

public:
 virtual void Close();
public:
 override void Close();
public void Close();
public override void Close();
abstract member Close : unit -> unit
override this.Close : unit -> unit
override this.Close : unit -> unit
Public Sub Close ()
Public Overrides Sub Close ()

實作

例外狀況

開啟連線時發生的連線層級錯誤。

範例

以下範例會產生一個 SqlConnection,開啟它,並顯示其部分屬性。 連接在區塊結束 using 時自動關閉。

private static void OpenSqlConnection(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        Console.WriteLine("ServerVersion: {0}", connection.ServerVersion);
        Console.WriteLine("State: {0}", connection.State);
    }
}
Private Sub OpenSqlConnection(ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
        connection.Open()
        Console.WriteLine("ServerVersion: {0}", connection.ServerVersion)
        Console.WriteLine("State: {0}", connection.State)
    End Using
End Sub

備註

Close 方法會回滾所有待處理的交易。 接著會釋放連線至連線池,或在關閉連線池時關閉連線。

Note

使用 Transact-SQL 或 BeginTransaction 啟動的待處理交易,若啟用連線池,連線重置時會自動回滾。 如果連線池關閉,交易會在呼叫後 SqlConnection.Close 回滾。 透過 開始 System.Transactions 的交易由基礎設施控制 System.Transactions ,不受 影響 SqlConnection.Close

一個應用程式可以呼叫 Close 不只一次。 不會產生例外。

如果超出 SqlConnection 範圍,案件不會被關閉。 因此,你必須明確地透過呼叫 CloseDispose來關閉這個連線。 CloseDispose 在功能上等價。 若連線池值 Pooling 設為 trueyes,底層連線會回傳至連線池。 另一方面,若 Pooling 設為 falseno,則與伺服器的底層連線即為關閉。

Note

從連接集區中擷取連接或將連接傳回連接集區時,系統不會在伺服器上引發登入和登出事件,因為當連接傳回連接集區時,連接實際上並未關閉。 如需詳細資訊,請參閱 SQL Server 連線共用 (ADO.NET)

注意事項

不要在你的類別方法中呼叫 CloseDispose 在 Connection、DataReader 或其他受管理物件 Finalize 上。 在終結者中,你應該只釋放你職業直接擁有的未管理資源。 如果你的類別沒有擁有任何非管理資源,請不要在類別定義中包含某個 Finalize 方法。 如需詳細資訊,請參閱垃圾回收(Garbage Collection, GC)

適用於

另請參閱