SqlConnection.Close メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
データベースへの接続を閉じます。 これは、開いている接続を閉じる場合に推奨される方法です。
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メソッドは、保留中のトランザクションをすべてロールバックします。 その後、接続プールへの接続を解放するか、接続プールが無効になっている場合は接続を閉じます。
Note
Transact-SQL または BeginTransaction を使用して開始された保留中のトランザクションは、接続プールが有効になっている場合、接続がリセットされると自動的にロールバックされます。 接続プールがオフの場合、トランザクションは、 SqlConnection.Close が呼び出された後にロールバックされます。
System.Transactionsによって開始されたトランザクションは、System.Transactions インフラストラクチャを介して制御され、SqlConnection.Closeの影響を受けません。
アプリケーションは Close を複数回呼び出すことができます。 例外は生成されません。
SqlConnectionがスコープ外になった場合、閉じられません。 そのため、 Close または Disposeを呼び出して、接続を明示的に閉じる必要があります。
Close と Dispose は機能的に同等です。 接続プールの値 Pooling が true または yesに設定されている場合は、基になる接続が接続プールに返されます。 一方、 Pooling が false または no に設定されている場合、基になるサーバーへの接続は閉じられます。
Note
接続が接続プールからフェッチされたり接続プールに返されたりしたとき、ログイン イベントとログアウト イベントはサーバーで発生しません。これは、接続プールに返されても接続は実際には終了していないためです。 詳しくは、「SQL Server の接続プール (ADO.NET)」をご覧ください。
Caution
Connection、DataReader、またはクラスの Close メソッド内の他のマネージド オブジェクトでDisposeまたはFinalizeを呼び出さないでください。 ファイナライザーでは、クラスが直接所有するアンマネージ リソースのみを解放する必要があります。 クラスがアンマネージ リソースを所有していない場合は、クラス定義に Finalize メソッドを含めないでください。 詳しくは、「ガベージ コレクション」をご覧ください。