다음을 통해 공유


SqlException 클래스

정의

SQL Server에서 경고 또는 오류를 반환할 때 throw되는 예외입니다. 이 클래스는 상속될 수 없습니다.

public ref class SqlException sealed : System::Data::Common::DbException
public ref class SqlException sealed : SystemException
public sealed class SqlException : System.Data.Common.DbException
[System.Serializable]
public sealed class SqlException : SystemException
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
type SqlException = class
    inherit DbException
[<System.Serializable>]
type SqlException = class
    inherit SystemException
[<System.Serializable>]
type SqlException = class
    inherit DbException
Public NotInheritable Class SqlException
Inherits DbException
Public NotInheritable Class SqlException
Inherits SystemException
상속
상속
상속
특성

예제

다음 예제에서는 를 SqlException 생성한 다음 예외를 표시합니다.

public static void ShowSqlException(string connectionString)
{
    string queryString = "EXECUTE NonExistantStoredProcedure";
    StringBuilder errorMessages = new StringBuilder();

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        try
        {
            command.Connection.Open();
            command.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            for (int i = 0; i < ex.Errors.Count; i++)
            {
                errorMessages.Append("Index #" + i + "\n" +
                    "Message: " + ex.Errors[i].Message + "\n" +
                    "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                    "Source: " + ex.Errors[i].Source + "\n" +
                    "Procedure: " + ex.Errors[i].Procedure + "\n");
            }
            Console.WriteLine(errorMessages.ToString());
        }
    }
}
Public Sub ShowSqlException(ByVal connectionString As String)
    Dim queryString As String = "EXECUTE NonExistantStoredProcedure"
    Dim errorMessages As New StringBuilder()

    Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand(queryString, connection)

        Try
            command.Connection.Open()
            command.ExecuteNonQuery()

        Catch ex As SqlException
            Dim i As Integer
            For i = 0 To ex.Errors.Count - 1
                errorMessages.Append("Index #" & i.ToString() & ControlChars.NewLine _
                    & "Message: " & ex.Errors(i).Message & ControlChars.NewLine _
                    & "LineNumber: " & ex.Errors(i).LineNumber & ControlChars.NewLine _
                    & "Source: " & ex.Errors(i).Source & ControlChars.NewLine _
                    & "Procedure: " & ex.Errors(i).Procedure & ControlChars.NewLine)
            Next i
            Console.WriteLine(errorMessages.ToString())
        End Try
    End Using
End Sub

설명

이 클래스는 .NET Framework Data Provider for SQL Server에서 서버에서 생성된 오류가 발생할 때마다 만들어집니다. (클라이언트 쪽 오류는 표준 공용 언어 런타임 예외를 throw 됨). SqlException 의 인스턴스를 하나 이상 항상 포함 SqlError합니다.

심각도 수준이 10 이하인 메시지는 정보를 제공하고 사용자가 입력한 정보의 실수로 인한 문제를 나타냅니다. 11에서 16까지의 심각도 수준은 사용자가 생성하며 사용자가 수정할 수 있습니다. 17에서 25까지의 심각도는 소프트웨어나 하드웨어 오류를 나타냅니다. 수준 17, 18 또는 19 오류가 발생하면 특정 문을 실행하지 못할 수도 있지만 작업을 계속할 수 있습니다.

SqlConnection 심각도 수준이 19 이하인 경우 는 열린 상태로 유지됩니다. 심각도 수준이 20 이상인 경우 서버는 일반적으로 를 닫습니다 SqlConnection. 그러나 사용자는 연결을 다시 열고 계속할 수 있습니다. 두 경우 모두 명령을 SqlException 실행하는 메서드에 의해 이 생성됩니다.

SQL Server에서 보낸 경고 및 정보 메시지에 대한 자세한 내용은 데이터베이스 엔진 이벤트 및 오류를 참조하세요. 클래스는 SqlException SQL Server 심각도에 매핑됩니다.

다음은 예외 처리에 대한 일반적인 정보입니다. 코드는 애플리케이션 충돌을 방지 하 고 관련 오류 메시지를 사용자에 게 표시를 허용 하는 예외를 catch 해야 합니다. 데이터 충돌 등 클라이언트 애플리케이션에서 어떻게에 관계 없이 일관 되도록 데이터베이스 트랜잭션을 사용할 수 있습니다. System.Transaction.TransactionScope 또는 BeginTransaction 메서드(System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection 및 System.Data.SqlClient.SqlConnection)와 같은 기능은 공급자가 발생한 예외에 관계없이 일관된 데이터를 보장합니다. 트랜잭션이 실패할 수 있으므로 오류를 catch하고 트랜잭션을 다시 시도합니다.

.NET Framework 4.5 SqlException 부터 는 내부 Win32Exception를 반환할 수 있습니다.

.NET Framework 데이터 공급자의 예외 클래스는 공급자별 오류를 보고합니다. 예를 들어 System.Data.Odbc에는 OdbcException, System.Data.OleDb에는 OleDbException, System.Data.SqlClient에는 SqlException이 있습니다. 최상의 오류 세부 정보를 보려면 이러한 예외를 catch하고 이러한 예외 클래스의 멤버를 사용하여 오류에 대한 세부 정보를 가져옵니다.

공급자별 오류 외에도 .NET Framework 데이터 공급자 형식은 System.OutOfMemoryException 및 System.Threading.ThreadAbortException과 같은 .NET Framework 예외를 발생할 수 있습니다. 이러한 예외에서 복구할 수 없습니다.

잘못된 입력으로 인해 .NET Framework 데이터 공급자 형식이 System.ArgumentException 또는 System.IndexOutOfRangeException과 같은 예외를 발생시킬 수 있습니다. 잘못된 시간에 메서드를 호출하면 System.InvalidOperationException이 발생합니다.

따라서 일반적으로 공용 언어 런타임의 예외뿐만 아니라 공급자별 예외를 catch하는 예외 처리기를 작성합니다. 다음과 같이 계층화할 수 있습니다.

try {  
   // code here  
}  
catch (SqlException odbcEx) {  
   // Handle more specific SqlException exception here.  
}  
catch (Exception ex) {  
   // Handle generic ones here.  
}  

또는

try {  
   // code here  
}  
catch (Exception ex) {  
   if (ex is SqlException) {  
      // Handle more specific SqlException exception here.  
   }  
   else {  
      // Handle generic ones here.  
   }  
}  

스택에 사용자 코드가 없는 스레드 풀 스레드에서 .NET Framework 데이터 공급자 메서드 호출이 실패할 수도 있습니다. 이 경우 비동기 메서드 호출을 사용 하는 경우, 등록 해야 합니다 UnhandledException 이러한 예외를 처리 하 고 애플리케이션 충돌을 방지 하기 위해 이벤트입니다.

속성

BatchCommand

를 실행할 DbBatch때 throw DbException 된 경우 예외를 트리거한 특정 DbBatchCommand 를 참조합니다.

(다음에서 상속됨 DbException)
Class

.NET Framework Data Provider for SQL Server에서 반환한 오류의 심각도 수준을 가져옵니다.

ClientConnectionId

클라이언트 연결 ID를 나타냅니다. 자세한 내용은 ADO.NET의 데이터 추적을 참조하세요.

Data

예외에 대한 사용자 정의 정보를 추가로 제공하는 키/값 쌍 컬렉션을 가져옵니다.

(다음에서 상속됨 Exception)
DbBatchCommand

파생 클래스에서 재정의된 경우 를 실행할 때 throw DbException 된 경우 예외를 DbBatch트리거한 특정 DbBatchCommand 를 참조합니다.

(다음에서 상속됨 DbException)
ErrorCode

오류의 HRESULT를 가져옵니다.

(다음에서 상속됨 ExternalException)
Errors

.NET Framework Data Provider for SQL Server에서 생성된 예외에 대한 자세한 정보를 제공하는 하나 이상의 SqlError 개체 컬렉션을 가져옵니다.

HelpLink

이 예외와 연결된 도움말 파일에 대한 링크를 가져오거나 설정합니다.

(다음에서 상속됨 Exception)
HResult

특정 예외에 할당된 코드화된 숫자 값인 HRESULT를 가져오거나 설정합니다.

(다음에서 상속됨 Exception)
InnerException

현재 예외를 발생시킨 Exception 인스턴스를 가져옵니다.

(다음에서 상속됨 Exception)
IsTransient

DbException이 나타내는 오류가 일시적 오류일 수 있는지, 즉 트리거하는 작업을 다시 시도할 경우 다른 변경 작업을 수행하지 않아도 성공할 수 있는지 여부를 나타냅니다.

(다음에서 상속됨 DbException)
LineNumber

오류를 생성한 Transact-SQL 명령 일괄이나 저장 프로시저의 줄 번호를 가져옵니다.

Message

오류를 설명하는 텍스트를 가져옵니다.

Message

현재 예외를 설명하는 메시지를 가져옵니다.

(다음에서 상속됨 Exception)
Number

오류의 형식을 식별하는 번호를 가져옵니다.

Procedure

오류를 생성한 저장 프로시저 또는 RPC(원격 프로시저 호출)의 이름을 가져옵니다.

Server

오류를 생성한 SQL Server 인스턴스를 실행하는 컴퓨터의 이름을 가져옵니다.

Source

오류를 생성한 공급자의 이름을 가져옵니다.

SqlState

이를 지원하는 데이터베이스 공급자의 경우에는 데이터베이스 작업의 성공 또는 실패를 나타내는 표준 SQL 5자 반환 코드가 포함됩니다. 처음 두 자는 반환 코드의 클래스(예: 오류, 성공)를 나타내며, 마지막 세 자는 하위 클래스를 나타내므로 데이터베이스 이식 가능한 방식으로 오류 시나리오를 검색할 수 있습니다.

이를 지원하지 않는 데이터베이스 공급자 또는 적용할 수 없는 오류 시나리오의 경우에는 null이 포함됩니다.

(다음에서 상속됨 DbException)
StackTrace

호출 스택의 직접 실행 프레임 문자열 표현을 가져옵니다.

(다음에서 상속됨 Exception)
State

오류, 경고 또는 "데이터 없음" 메시지를 나타내는 SQL Server에서 숫자 오류 코드를 가져옵니다. 이러한 값을 디코딩하는 방법은 데이터베이스 엔진 이벤트 및 오류를 참조하세요.

TargetSite

현재 예외를 throw하는 메서드를 가져옵니다.

(다음에서 상속됨 Exception)

메서드

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
GetBaseException()

파생 클래스에서 재정의된 경우 하나 이상의 후속 예외의 근본 원인이 되는 Exception 을 반환합니다.

(다음에서 상속됨 Exception)
GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetObjectData(SerializationInfo, StreamingContext)

예외에 대한 정보를 사용하여 SerializationInfo를 설정합니다.

GetObjectData(SerializationInfo, StreamingContext)
사용되지 않음.

파생 클래스에서 재정의된 경우 예외에 관한 정보를 SerializationInfo 에 설정합니다.

(다음에서 상속됨 Exception)
GetType()

현재 인스턴스의 런타임 형식을 가져옵니다.

(다음에서 상속됨 Exception)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ToString()

현재 SqlException 개체를 나타내고 클라이언트 연결 ID를 포함하는 문자열을 반환합니다. 자세한 내용은 ClientConnectionId를 참조하십시오.

ToString()

오류의 HRESULT가 들어 있는 문자열을 반환합니다.

(다음에서 상속됨 ExternalException)
ToString()

현재 예외에 대한 문자열 표현을 만들고 반환합니다.

(다음에서 상속됨 Exception)

이벤트

SerializeObjectState
사용되지 않음.

예외에 대한 serialize된 데이터가 들어 있는 예외 상태 개체가 만들어지도록 예외가 serialize될 때 발생합니다.

(다음에서 상속됨 Exception)

적용 대상

추가 정보