다음을 통해 공유


공급자 오류

공급자 오류가 발생하면 -2147467259 런타임 오류가 반환됩니다. 이 오류가 표시되면 활성 Connection 개체의 Errors 컬렉션을 확인합니다. 이 컬렉션에는 발생한 작업을 설명하는 하나 이상의 오류가 포함됩니다.

ADO 오류 컬렉션

특정 ADO 작업은 여러 공급자 오류를 생성할 수 있으므로 ADO는 Connection 개체를 통해 오류 개체 컬렉션을 노출합니다. 이 컬렉션에는 작업이 성공적으로 종료되면 개체가 포함되지 않으며 문제가 발생하여 공급자가 하나 이상의 오류를 발생시킨 경우 하나 이상의 Error 개체가 포함됩니다. 각 오류 개체를 검사하여 오류의 정확한 원인을 확인합니다.

발생한 오류 처리를 완료하는 즉시 Clear 메서드를 호출하여 컬렉션을 지울 수 있습니다. Recordset 개체에서 Resync, UpdateBatch 또는 CancelBatch 메서드, Connection 개체에서 Open 메서드 호출하거나 Recordset 개체에서 Filter 속성을 설정하기 전에 Errors 컬렉션을 명시적으로 지우는 것이 특히 중요합니다. 컬렉션을 명시적으로 지우면 컬렉션의 Error 개체가 이전 작업에서 남아 있지 않은지 확인할 수 있습니다.

일부 작업은 오류 외에도 경고를 생성할 수 있습니다. 경고는 Errors 컬렉션의 Error 개체로도 표시됩니다. 공급자가 컬렉션에 경고를 추가하면 런타임 오류가 생성되지 않습니다. Errors 컬렉션의 Count 속성을 확인하여 특정 작업에 의해 경고가 생성되었는지 여부를 확인합니다. 개수가 하나 이상인 경우 Error 개체가 컬렉션에 추가된 것입니다. Errors 컬렉션에 오류 또는 경고가 포함된 것으로 확인되면 즉시 컬렉션을 반복하고 포함된 각 Error 개체에 대한 정보를 검색할 수 있습니다. 다음 짧은 Visual Basic 예제에서는 이를 보여 줍니다.

' BeginErrorHandlingVB02  
Private Function DeleteCustomer(ByVal CompanyName As String) As Long  
    On Error GoTo DeleteCustomerError  
  
    rst.Find "CompanyName='" & CompanyName & "'"  
DeleteCustomerError:  
Dim objError As ADODB.Error  
Dim strError As String  
  
    If cnn.Errors.Count > 0 Then  
        For Each objError In cnn.Errors  
            strError = strError & "Error #" & objError.Number & _  
                " " & objError.Description & vbCrLf & _  
                "NativeError: " & objError.NativeError & vbCrLf & _  
                "SQLState: " & objError.SQLState & vbCrLf & _  
                "Reported by: " & objError.Source & vbCrLf & _  
                "Help file: " & objError.HelpFile & vbCrLf & _  
                "Help Context ID: " & objError.HelpContext  
        Next  
        MsgBox strError  
    End If  
End Function  
' EndErrorHandlingVB02  

오류 처리 루틴에는 Errors 컬렉션의 각 개체를 검사하는 For Each 루프가 포함됩니다. 이 예제에서는 표시할 메시지를 누적합니다. 작업 프로그램에서는 열려 있는 모든 파일을 닫고 프로그램을 순서대로 종료하는 등 각 오류에 대해 적절한 작업을 수행하는 코드를 작성합니다.

Error 개체

Error 개체를 검사하여 발생한 오류, 더 중요한 것으로 오류를 발생시킨 애플리케이션 또는 개체를 확인할 수 있습니다. Error 개체의 속성은 다음과 같습니다.

Property name 설명
설명 발생한 오류에 대한 텍스트 설명입니다.
HelpContext, HelpFile 발생한 오류에 대한 설명이 포함된 도움말 항목 및 도움말 파일을 참조합니다.
NativeError 공급자 관련 오류 번호입니다.
숫자 발생한 오류의 번호(ErrorValueEnum에 나열됨)를 나타내는 정수(Long)입니다.
Source 오류를 생성한 개체 또는 애플리케이션의 이름을 나타냅니다.
SQLState SQL 문을 처리하는 동안 공급자가 반환하는 5자 오류 코드입니다.

ADO Error 개체는 표준 Visual Basic Err 개체와 매우 유사합니다. 해당 속성은 발생한 오류를 설명합니다. 오류 수 외에도 두 가지 관련 정보도 받게 됩니다. NativeError 속성에는 사용 중인 공급자와 관련된 오류 번호가 포함되어 있습니다. 이전 예제에서 공급자는 SQL Server용 Microsoft OLE DB 공급자이므로 NativeError에는 SQL Server와 관련된 오류가 포함됩니다. SQLState 속성에는 SQL 문의 오류를 설명하는 5자 코드가 있습니다.

Error 개체는 이벤트 관련 오류가 발생할 때도 사용됩니다. 이벤트 매개 변수로 전달된 Error 개체를 확인하여 ADO 이벤트를 발생시킨 프로세스에서 오류가 발생했는지 여부를 확인할 수 있습니다.

이벤트를 발생시키는 작업이 성공적으로 종료되면 이벤트 처리기의 adStatus 매개 변수가 adStatusOK로 설정됩니다. 반면에 이벤트를 발생시킨 작업이 실패하면 adStatus 매개 변수가 adStatusErrorsOccurred로 설정됩니다. 이 경우 pError 매개 변수에는 오류를 설명하는 Error 개체가 포함됩니다.