如何截获数据库操作时来自服务器的错误返回码
时间:2010-10-12 来源:梦在贝加尔湖
问题内容:如何截获数据库操作时来自服务器的错误返回码
数据库用的是SQL Sever2000里的Pub例子数据库,使用Adodc何Datagrid控件,
操作1:对employee表作添加新纪录的操作,由于表employee是以emp_id做做主键的,那么,当我添加一个已经存在的主键纪录时,SQL Server一定会返回一个错误代码给我,告诉我出错,那么我如何写码才能使这个错误有我来处理后返回一个合适的信息给用户而不是突兀的弹出一个类似编译错的对话框
操作2:对jobs表作删除操作,由于jobs表的job_id时employee表的外键,我在删除jobs表的某条纪录正好触犯了外键约束的条件,于是同样会有错误对话框弹出,我的问题仍然是如何截获它
我想问的就是如何在VB代码里截获SQL Server地返回错误码(VC可以用Try,VB呢),并根据错误码的值作相应操作(哪里有这些错误码的详细说明),我是VB新手,望大虾指教,不胜感激!!!
--------------------------------------------------------------- 感谢您使用微软产品。
您可以在ADODB.Connection 的ExecuteComplete事件发生时判断SQL语句是否执行成功的信息,并获取错误信息。如果此时不对错误进行处理,将发生Rum-time Error,您可以使用On Error Statement来处理错误,防止程序的崩溃。
如果SQL语句的执行没有错误,ADO.connection对象的execute方法的第二个参数是存储返回值的变量,反映了受影响的记录个数,您可以通过这个参数变量获得SQL语句执行结果的信息。如下例:
Private WithEvents cases As ADODB.Connection ‘为了获取对象的事件,需在声明对象时加WithEvents关键字。
Private Sub cases_ExecuteComplete(ByVal RecordsAffected As Long, _
ByVal pError As ADODB.Error, _
adStatus As ADODB.EventStatusEnum, _
ByVal pCommand As ADODB.Command, _
ByVal pRecordset As ADODB.Recordset, _
ByVal pConnection As ADODB.Connection)
If adStatus = adStatusErrorsOccurred Then
MsgBox pError.Description
Else
MsgBox "exec success"
End If
End Sub
Private Sub Command2_Click()
Set cases = CreateObject("ADODB.Connection")
cases.Open ("testdb1")
Dim num As Integer
exsql = "delete from Table1 where ID>0"
On Error GoTo errl
cases.Execute exsql, num
Text2.Text = num
Exit Sub
errl:
MsgBox Err.Description
Exit Sub
End Sub
每次执行与ADO有关的操作时,所有provider errors都被加入connection的Errors属性,您也可以由此获得错误信息。修改on error的处理代码如下:
errl:
For Each Err In cases.Errors
strError = "Error #" & Err.Number & vbCr & _
" " & Err.Description & vbCr & _
" (Source: " & Err.Source & ")" & vbCr & _
" (SQL State: " & Err.SQLState & ")" & vbCr & _
" (NativeError: " & Err.NativeError & ")" & vbCr
If Err.HelpFile = "" Then
strError = strError & " No Help file available"
Else
strError = strError & _
" (HelpFile: " & Err.HelpFile & ")" & vbCr & _
" (HelpContext: " & Err.HelpContext & ")" & _
vbCr & vbCr
End If
Debug.Print strError
Next
Exit Sub
详细信息请参考:
Execute Method (ADO Connection)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnnexecute.asp
ExecuteComplete Event
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdevtexecutecomplete.asp
On Error Statement
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vblr7/html/vastmonerror.asp
Errors Collection
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdcolerrors.asp
Description, HelpContext, HelpFile, NativeError, Number, Source, and SQLState Properties Example (VB)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdprodescriptionx.asp
- 微软全球技术中心 VB技术支持
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款
(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查
(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。