다음을 통해 공유


연결 이벤트

적용 대상: .NET Framework .NET .NET Standard

ADO.NET 다운로드

모든 SQL Server용 Microsoft SqlClient 데이터 공급자에는 데이터 원본에서 정보 메시지를 검색하거나 Connection 상태의 변경 여부를 판단하는 데 사용할 수 있는 두 가지 이벤트가 포함된 Connection 개체가 있습니다. 다음 표에서는 Connection 개체의 이벤트에 대해 설명합니다.

이벤트 설명
InfoMessage 정보 메시지가 데이터 소스에서 반환될 때 발생합니다. 정보 메시지는 예외가 throw되지 않는 데이터 원본의 메시지입니다.
StateChange 연결 상태가 변경될 때 발생합니다.

InfoMessage 이벤트 사용

InfoMessage 개체의 SqlConnection 이벤트를 사용하여 SQL Server 데이터 소스에서 경고 및 정보 메시지를 검색할 수 있습니다. 데이터 소스에서 반환된 오류의 심각도 수준이 11~16에 해당하면 예외가 throw됩니다. 하지만 InfoMessage 이벤트는 오류와 관련이 없는 데이터 원본에서 메시지를 가져오는 데 사용할 수 있습니다. Microsoft SQL Server를 사용하면 심각도가 10 이하인 오류는 정보 메시지로 간주되며, InfoMessage 이벤트를 사용하여 캡처할 수 있습니다. 자세한 내용은 데이터베이스 엔진 오류 심각도 문서를 참조하세요.

InfoMessage 이벤트는 SqlInfoMessageEventArgs 개체를 받으며 이 개체의 Errors 속성에는 데이터 원본의 메시지 컬렉션이 포함되어 있습니다. 이 컬렉션의 오류 개체에서 오류 번호와 메시지 텍스트 및 오류 소스를 쿼리할 수 있습니다. SQL Server용 Microsoft SqlClient 데이터 공급자는 메시지가 발생한 데이터베이스, 저장 프로시저 및 줄 번호에 대한 자세한 내용도 포함하고 있습니다.

예시

다음 코드 예제에서는 InfoMessage 이벤트에 대한 이벤트 처리기를 추가하는 방법을 보여 줍니다.

// Assumes that connection represents a SqlConnection object.
connection.InfoMessage +=
    (object sender, SqlInfoMessageEventArgs args) =>
    {
        foreach (SqlError err in args.Errors)
        {
            Console.WriteLine(
          "The {0} has received a severity {1}, state {2} error number {3}\n" +
          "on line {4} of procedure {5} on server {6}:\n{7}",
           err.Source, err.Class, err.State, err.Number, err.LineNumber,
           err.Procedure, err.Server, err.Message);
        }
    };

오류를 InfoMessages로 처리

InfoMessage 이벤트는 일반적으로 서버에서 전송되는 정보 및 경고 메시지에 대해서만 발생합니다. 그러나 실제 오류가 발생하면 서버 작업을 시작한 ExecuteNonQuery 또는 ExecuteReader 메서드의 실행이 중지되고 예외가 throw됩니다.

서버에서 발생한 오류와는 상관없이 명령에서 나머지 문을 계속 처리하려면 FireInfoMessageEventOnUserErrorsSqlConnection 속성을 true로 설정합니다. 이 속성을 설정하면 예외를 throw하고 처리를 중단하는 대신 오류에 대한 InfoMessage 이벤트를 발생시키는 연결이 발생합니다. 그러면 클라이언트 애플리케이션에서 이 이벤트를 처리하고 오류 조건에 응답할 수 있습니다.

참고 항목

심각도 수준이 17 이상인 오류는 서버에서 명령 처리를 중지하도록 하며 예외로 처리되어야 합니다. 이 경우 오류가 InfoMessage 이벤트에서 처리되는 방법과 상관없이 예외가 throw됩니다.

StateChange 이벤트 작업

Connection 상태가 바뀌면 StateChange 이벤트가 발생합니다. StateChange 이벤트는 OriginalStateCurrentState 속성을 사용하여 Connection의 상태 변화를 확인할 수 있도록 하는 StateChangeEventArgs를 받습니다. OriginalState 속성은 변경 전의 Connection 상태를 나타내는 ConnectionState 열거형입니다. CurrentState는 변경 후의 Connection 상태를 나타내는 ConnectionState 열거형입니다.

다음 코드 예제에서는 Connection 상태가 변경될 때 StateChange 이벤트를 사용하여 콘솔에 메시지를 씁니다.

// Assumes that connection represents a SqlConnection object.
connection.StateChange +=
    (object sender, StateChangeEventArgs args) =>
    {
        Console.WriteLine(
          "The current Connection state has changed from {0} to {1}.",
            args.OriginalState, args.CurrentState);
    };

참고 항목