Delphi 中ADO使用SQLOLEDB数据驱动时,无法获取存储过程RAISERROR返回的字符串描述

在使用Delphi的TADOConnection组件与MSSQL数据库进行交互时,遇到一个问题:当调用存储过程并使用RAISERROR时,无法通过OLEDB驱动获取错误信息。切换到ODBC驱动后,虽然能捕获错误,但datetime类型的参数会引发新的问题。解决方法是将datetime output参数改为select返回,以确保程序的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

真的很郁闷:我的三层架构,数据库访问层使用的是 TADOConnection系列控件:TADOQuery、TADOStoredProc。数据库是MSSQL。今天无意中测试存储过程,发现存储过程中的事务回滚了,但RAISERROR返回的错误程序却捕获不到。存储过程示例如下:

alter procedure proc_test(
) as
begin
    begin transaction

    update job
    set operatetime=getdate()
    where id=4

    raiserror ('保存失败aaa', 16, 1)

    if (@@error = 0)
    begin
        commit transaction
        return 1
    end
    else
    begin
        rollback transaction
        raiserror ('保存失败', 16, 1)
        return 0
    end
end

使用 TADOStoredProc 执行,没有任何效果。Delphi XE 中代码如下:

procedure TForm2.Button2Click(Sender: TObject);
begin
  with ADOStoredProc1 do
  begin
    ExecProc;
  end;
end;


我看了一下数据库,存储过程是回滚了。但程序却捕获不到任何错误。

后来,我把驱动从 OLEDB 换成了ODBC,果然能捕获错误了。但又出现了新问题&#x

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值