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 事件过程代码试图打开同一 连接 对象两次,从而故意引发错误。 第二次调用 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 对象仅包含有关最新错误的信息。 Connection 对象的 ADO Errors 集合包含最近 ADO 操作引发的每个错误的 错误 对象。 使用 Errors 集合而不是 Err 对象来处理多个错误。 有关 Errors 集合的详细信息,请参阅 提供者错误。 但是,如果没有有效的 Connection 对象,则 Err 对象是唯一有关 ADO 错误的信息的源。

哪些类型的操作可能会导致 ADO 错误? 常见的 ADO 错误可能涉及打开对象(如 连接Recordset、尝试更新数据或调用提供程序不支持的方法或属性)。

还可以将 OLE DB 错误作为 Errors 集合中的运行时错误传递给应用程序。

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