공급자 오류
공급자 오류가 발생하면 -2147467259 런타임 오류가 반환됩니다. 이 오류를 받으면, 어떤 일이 발생했는지를 설명하는 하나 이상의 오류가 포함되어 있는 활성 Connection 개체의 Errors 컬렉션을 확인하십시오.
ADO Errors 컬렉션
특정 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 개체에는 다음과 같은 속성이 있습니다.
속성 이름 | 설명 |
---|---|
설명 | 발생한 오류에 대한 텍스트 설명입니다. |
HelpContext, HelpFile | 발생한 오류에 대한 설명이 포함된 도움말 항목 및 도움말 파일을 참조합니다. |
네이티브 오류 | 공급자별 오류 번호입니다. |
번호 | 발생한 오류의 숫자(ErrorValueEnum나열됨)를 나타내는 Long 정수입니다. |
원본 | 오류를 생성한 개체 또는 애플리케이션의 이름을 나타냅니다. |
SQLState | SQL 문을 처리하는 동안 공급자가 반환하는 5자 오류 코드입니다. |
ADO Error 개체는 표준 Visual Basic Err 개체와 매우 유사합니다. 해당 속성은 발생한 오류를 설명합니다. 오류 수 외에도 두 가지 관련 정보도 받습니다. NativeError 속성에는 사용 중인 공급자와 관련된 오류 번호가 포함되어 있습니다. 이전 예제에서 공급자는 Microsoft OLE DB Provider for SQL Server이므로 NativeError SQL Server와 관련된 오류가 포함됩니다. SQLState 속성에는 SQL 문의 오류를 설명하는 5자 코드가 있습니다.
Event-Related 오류
Error 개체는 이벤트 관련 오류가 발생할 때도 사용됩니다. 이벤트 매개 변수로 전달된 Error 개체를 확인하여 ADO 이벤트를 발생시킨 프로세스에서 오류가 발생했는지 여부를 확인할 수 있습니다.
이벤트를 발생시키는 작업이 성공적으로 완료되면 이벤트 처리기의 adStatus 매개 변수가 adStatusOK 설정됩니다. 반면에 이벤트를 발생시킨 작업이 실패한 경우, adStatus 매개변수는 adStatusErrorsOccurred로 설정됩니다. 이 경우 pError 매개 변수에는 오류를 설명하는 Error 개체가 포함됩니다.