SqlConnection.Close メソッド

定義

データベースへの接続を閉じます。 このメソッドは、開いている接続を閉じるための最も好ましいメソッドです。

public:
 override void Close();
public:
 virtual void Close();
public override void Close ();
public void Close ();
override this.Close : unit -> unit
abstract member Close : unit -> unit
override this.Close : unit -> unit
Public Overrides Sub Close ()
Public 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 メソッドは、保留中のすべてのトランザクションをロールバックします。 その後、接続を接続プールに解放するか、接続プールが無効な場合は接続を閉じます。

注意

保留中のトランザクションは、Transact-SQL の使用を開始するか BeginTransaction 、接続プールが有効になっている場合に接続がリセットされると自動的にロールバックされます。 接続プールがオフの場合、トランザクションは が呼び出された後 SqlConnection.Close にロールバックされます。 から System.Transactions 開始されたトランザクションはインフラストラクチャを System.Transactions 介して制御され、 の影響を SqlConnection.Close受けません。

アプリケーションは複数の時刻を呼び出 Close すことができます。 例外は生成されません。

SqlConnection スコープ外になった場合、閉じられません。 したがって、 または Disposeを呼び出Closeして、接続を明示的に閉じる必要があります。 CloseDispose は機能的に同等です。 接続プールの値Poolingが または yestrue設定されている場合、基になる接続は接続プールに返されます。 一方、 が または nofalse設定されている場合Pooling、サーバーへの基になる接続は閉じられます。

Note

接続が接続プールからフェッチされたり接続プールに返されたりしたとき、ログイン イベントとログアウト イベントはサーバーで発生しません。これは、接続プールに返されても接続は実際には終了していないためです。 詳しくは、「SQL Server の接続プール (ADO.NET)」をご覧ください。

注意事項

Connection、DataReader、またはDisposeクラスの メソッド内の他のマネージド オブジェクトを呼び出したり、その他のマネージド オブジェクトをFinalize呼び出Closeしたりしないでください。 ファイナライザーでは、クラスが直接所有するアンマネージド リソースのみを解放する必要があります。 クラスがアンマネージ リソースを所有していない場合は、クラス定義に Finalize メソッドを含めないでください。 詳しくは、「ガベージ コレクション」をご覧ください。

適用対象

こちらもご覧ください