如何在返回结果集后发生SQL错误时强制TADOConnection抛出异常

问题描述 投票:1回答:1

在返回某些结果集后发生异常时,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

delphi delphi-xe2 ado
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.