ADO 运行时错误

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 对象报告。 你将在此处看到对象的类型或编程 ID,而不是变量名称。

注意

Visual Basic Err 对象仅包含有关最新错误的信息。 对于由最近的 ADO 操作引发的每个错误,Connection 对象的 ADO Errors 集合都包含一个相应的 Error 对象。 使用错误集合而不是 Err 对象来处理多个错误。 有关错误集合的详细信息,请参阅提供程序错误。 但是,如果没有有效的 Connection 对象,则 Err 对象是有关 ADO 错误信息的唯一来源。

什么类型的操作可能导致 ADO 错误? 常见的 ADO 错误可能涉及打开 Connection 或 Recordset 等对象、尝试更新数据或调用提供程序不支持的方法或属性。

OLE DB 错误也可以在错误集合中作为运行时错误传递给应用程序。

以下主题提供有关 ADO 错误的详细信息。