共用方式為


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 物件會報告錯誤。 您會在這裡看到物件的類型或程式設計識別碼,而不是變數名稱。

注意

Visual Basic Err 物件只包含最近錯誤的相關資訊。 ADO Connection 物件的 Errors 集合包含最近 ADO 作業所引發之每個錯誤的 Error 物件。 使用 Errors 集合,而不是 Err 物件來處理多個錯誤。 如需 Errors 集合的詳細資訊,請參閱提供者錯誤。 不過,如果沒有有效的 Connection 物件,Err 物件便會是 ADO 錯誤資訊的唯一來源。

何種作業很可能會造成 ADO 錯誤? 常見的 ADO 錯誤可能涉及開啟如 ConnectionRecordset 的物件、嘗試更新資料,或呼叫提供者不支援的方法或屬性。

OLE DB 錯誤也可以當做 Errors 集合中的執行階段錯誤傳遞至您的應用程式。

下列主題提供有關 ADO 錯誤的詳細資訊。