如何截获数据库操作时来自服务器的错误返回码

 问题内容:如何截获数据库操作时来自服务器的错误返回码

原讨论链接: http://community.csdn.net/expert/topicview1.asp?id=989972 所属论坛: 数据库(包含打印,安装,报表)     审核组: VB 提问者: bluetide     解决者: 感谢: acptvb 关键字: VB 数据库 SQL 变量 语句 数据库(包含打印,安装,报表) http 错误 sub library 截获 vbcr 答案:

数据库用的是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))。

转载于:https://www.cnblogs.com/JoshuaDreaming/archive/2010/10/12/1848872.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值