Поделиться через


Ошибки ADO Run-Time

Ошибки ADO передаются в программу в качестве ошибок во время выполнения. Можно использовать механизм перехвата ошибок в языке программирования для их перехвата и обработки. Например, в Visual Basic используйте инструкцию On Error. В Visual C++он зависит от метода, используемого для доступа к библиотекам ADO. С помощью #import используйте блок try-catch . В противном случае программисты C++ должны явно получить объект ошибки, вызвав GetErrorInfo. В следующей подпроцедуре Visual Basic демонстрируется отлов ошибки ADO:

' BeginErrorHandlingVB01
Private Sub Form_Load()
' Turn on error handling
On Error GoTo FormLoadError

'Open the database and the recordset for processing.
'
Dim strCnn As String
strCnn = "Provider=sqloledb;" & _
    "Data Source=a-iresmi2000;" & _
    "Initial Catalog=Northwind;Integrated Security=SSPI"

' cnn is a Public Connection Object because
' it was defined WithEvents
Set cnn = New ADODB.Connection
cnn.Open strCnn

' The next line of code intentionally causes
' an error by trying to open a connection
' that has already been opened.
cnn.Open strCnn

' rst is a Public Recordset because it
' was defined WithEvents
Set rst = New ADODB.Recordset
rst.Open "Customers", cnn

Exit Sub

' Error handler
FormLoadError:
    Dim strErr As String
    Select Case Err
        Case adErrObjectOpen
            strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
            strErr = strErr & "Error reported by: " & Err.Source & vbCrLf
            strErr = strErr & "Help File: " & Err.HelpFile & vbCrLf
            strErr = strErr & "Topic ID: " & Err.HelpContext
            MsgBox strErr
            Debug.Print strErr
            Err.Clear
            Resume Next
        ' If some other error occurs that
        ' has nothing to do with ADO, show
        ' the number and description and exit.
        Case Else
            strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
            MsgBox strErr
            Debug.Print strErr
            Unload Me
    End Select
End Sub
' EndErrorHandlingVB01

Эта процедура события Form_Load намеренно создает ошибку, пытаясь открыть тот же объект Connection дважды. Во второй раз вызывается метод Open, обработчик ошибок активируется. В этом случае ошибка имеет тип adErrObjectOpen, поэтому обработчик ошибок отображает следующее сообщение перед возобновлением выполнения программы:

Error #3705: Operation is not allowed when the object is open.
Error reported by: ADODB.Connection
Help File: E:\WINNT\HELP\ADO260.CHM Topic ID: 1003705

Сообщение об ошибке содержит каждую часть информации, предоставляемую объектом Visual Basic Err, за исключением значения lastDLLError, которое не применяется здесь. Номер ошибки указывает, какая ошибка произошла. Описание полезно в случаях, когда вы не хотите обрабатывать ошибку самостоятельно. Его можно просто передать пользователю. Хотя обычно вы хотите использовать сообщения, настроенные для приложения, вы не можете ожидать каждой ошибки; Описание дает некоторое представление о том, что пошло не так. В примере кода сообщение об ошибке было сообщено объектом Connection. Здесь вы увидите тип объекта или программный идентификатор, а не имя переменной.

Заметка

Объект Visual Basic Err содержит только сведения об последней ошибке. Коллекция ошибок ADO объекта подключения содержит один объект Error для каждой ошибки, вызванной последней операцией ADO. Используйте коллекцию Errors вместо объекта Err для обработки нескольких ошибок. Дополнительные сведения о коллекции ошибок см. в ошибок поставщика. Однако, если допустимый объект Connection отсутствует, объект Err является единственным источником сведений об ошибках ADO.

Какие виды операций, скорее всего, вызывают ошибки ADO? Распространенные ошибки ADO могут включать открытие объекта, например connection или Recordset, попытку обновить данные или вызвать метод или свойство, которое не поддерживается поставщиком.

Ошибки OLE DB также можно передать приложению в виде ошибок во время выполнения в коллекции ошибок.

В следующем разделе приведены дополнительные сведения об ошибках ADO.