提供程序错误
发生提供程序错误时,将返回运行时错误 -2147467259。 收到此错误时,请检查活动 Connection 对象的 Errors 集合,该集合将包含描述所发生情况的一个或多个错误。
ADO Errors 集合
由于特定的 ADO 操作可以生成多个提供程序错误,因此 ADO 会通过 Connection 对象公开 Error 对象的集合。 如果操作成功完成,则此集合不包含任何对象,而如果出现问题并且提供程序引发一个或多个错误,则会包含一个或多个 Error 对象。 检查每个 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
错误处理例程包括一个 For Each 循环,用于检查 Errors 集合中的每个对象。 在此示例中,会累积一条消息以供显示。 在工作程序中,可以编写代码以为每个错误执行适当的任务,例如关闭所有打开的文件,按顺序关闭程序。
Error 对象
通过检查 Error 对象,可以确定发生了哪种错误,更重要的是可以确定是哪个应用程序或哪个对象导致了此错误。 Error 对象具有以下属性:
属性名称 | 说明 |
---|---|
描述 | 所发生的错误的文本说明。 |
HelpContext、HelpFile | 请参阅帮助主题和帮助文件,其中包含所发生错误的说明。 |
NativeError | 特定于提供程序的错误数。 |
数字 | 一个表示所发生错误数的长整数(已在 ErrorValueEnum 中列出)。 |
Source | 指示生成错误的对象或应用程序的名称。 |
SQLState | 提供程序在 SQL 语句过程中返回的五个字符错误代码。 |
ADO Error 对象与标准 Visual Basic Err 对象非常相似。 其属性描述发生的错误。 除错误数外,还会收到两条相关信息。 NativeError 属性包含特定于所使用的提供程序的错误号。 在前面的示例中,提供程序是 Microsoft OLE DB Provider for SQL Server,因此 NativeError 将包含特定于 SQL Server 的错误。 SQLState 属性有一个五字母代码,用于描述 SQL 语句中的错误。
与事件相关的错误
当发生与事件相关的错误时,也会使用 Error 对象。 通过检查作为事件参数传递的 Error 对象,可以确定引发 ADO 事件的进程中是否发生了错误。
如果引发事件的操作成功,则事件处理程序的 adStatus 参数将设置为 adStatusOK。 另一方面,如果引发事件的操作失败,adStatus 参数将设置为 adStatusErrorsOccurred。 在这种情况下,pError 参数将包含描述错误的 Error 对象。