다음을 통해 공유


SqlConnection.Close 메서드

정의

데이터베이스에 대한 연결을 닫습니다. 열린 연결을 닫기 위해 기본적으로 이 메서드를 사용합니다.

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

예외

연결을 여는 동안 발생한 연결 수준 오류입니다.

예제

다음 예제에서는 을 SqlConnection만들고, 열고, 해당 속성 중 일부를 표시합니다. 연결은 블록의 using 끝에서 자동으로 닫힙니다.

using Microsoft.Data.SqlClient;

class Program1
{
    static void Main()
    {
        string s = GetConnectionString();

        OpenSqlConnection(s);
        Console.ReadLine();
    }

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

    static private string GetConnectionString()
    {
        // To avoid storing the connection string in your code, 
        // you can retrieve it from a configuration file, using the 
        // System.Configuration.ConfigurationSettings.AppSettings property 
        return "Data Source=(local);Initial Catalog=AdventureWorks;"
            + "Integrated Security=SSPI;";
    }
}

설명

Close 메서드 보류 중인 트랜잭션을 모두 롤백합니다. 그런 다음 연결 풀에 대 한 연결을 해제 하거나 연결 풀링을 사용 하지 않도록 설정 하는 경우 연결을 닫습니다.

참고

보류 중인 트랜잭션이 Transact-SQL을 사용하여 시작되거나 BeginTransaction 연결 풀링을 사용하도록 설정된 경우 연결이 다시 설정되면 자동으로 롤백됩니다. 연결 풀링이 꺼져 있으면 가 호출된 후 SqlConnection.Close 트랜잭션이 롤백됩니다. 를 통해 System.Transactions 시작된 트랜잭션은 인프라를 System.Transactions 통해 제어되며 의 영향을 SqlConnection.Close받지 않습니다.

애플리케이션에서 호출할 수 Close 번 이상. 예외가 생성되지 않습니다.

SqlConnection 범위를 벗어나면 닫혀 있지 않습니다. 따라서 또는 Dispose를 호출 Close 하여 연결을 명시적으로 닫아야 합니다. CloseDispose 는 기능적으로 동일합니다. 연결 풀링 값 Pooling 이 또는 yestrue 설정된 경우 기본 연결이 연결 풀로 다시 반환됩니다. 반면, 가 또는 nofalse 설정된 경우 Pooling 서버에 대한 기본 연결이 닫힙니다.

참고

연결이 연결 풀에서 반환될 경우에는 실제로 해제된 것이 아니므로 연결이 연결 풀에서 반입되거나 연결 풀로 반환되는 경우 서버에서 로그인 및 로그아웃 이벤트가 발생하지 않습니다. 자세한 내용은 SQL Server 연결 풀링(ADO.NET)을 참조하세요.

주의

클래스의 메서드에서 Connection, DataReader 또는 기타 관리되는 개체에서 Finalize 또는 Dispose 를 호출 Close 하지 마세요. 종료자에서 클래스가 직접 소유하는 관리되지 않는 리소스만 해제해야 합니다. 클래스에 관리되지 않는 리소스가 없는 경우 클래스 정의에 Finalize 메서드를 포함하지 마세요. 자세한 내용은 가비지 수집을 참조하세요.

적용 대상