返回结果集后发生SQL错误时,如何强制TADOConnection引发异常

时间:2019-03-29 13:35:10

标签: delphi delphi-xe2 ado

当返回某个结果集后发生异常时,TADOConnection不想引发异常。例如:

ADOConnection1.Execute('SET NOCOUNT ON; SELECT 0; THROW 50000, ''Custom error'', 1;');

上面的代码不会抛出,因为有一个由SELECT 0;引起的结果集

在这种情况下如何强制TADOConnection引发异常?我无法避免返回结果集。我尝试过的事情:

  • 处理OnInfoMessage事件,但从未触发。
  • 正在检查TADOConnection.Errors属性,但是那里没有错误。

我找到了针对此问题的文章,但涉及到.NET:

The Curious Case of Undetected SQL Exceptions

1 个答案:

答案 0 :(得分:2)

我可以像这样使用Custom Error来显示TADOQuery

var
  t : integer;
begin
  ADOQuery1.SQL.Text := 'SET NOCOUNT ON; SELECT 0; THROW 50000, ''Custom error'', 1;';
  ADOQuery1.Open;
  t := 0;
  ADOQuery1.NextRecordset(t); // exception thrown here
end;