Delphi 在返回结果集后发生SQL错误时,如何强制TADOConnection引发异常
当返回某个结果集后发生异常时,TADOConnection不希望引发异常。例如:Delphi 在返回结果集后发生SQL错误时,如何强制TADOConnection引发异常,delphi,delphi-xe2,ado,Delphi,Delphi Xe2,Ado,当返回某个结果集后发生异常时,TADOConnection不希望引发异常。例如: ADOConnection1.Execute('SET NOCOUNT ON; SELECT 0; THROW 50000, ''Custom error'', 1;'); 上面的代码不会抛出,因为存在由SELECT 0导致的结果集 在这种情况下,如何强制TADOConnection抛出异常?我无法避免返回结果集。我尝试过的事情: 处理OnInfoMessage事件,但它从未被激发 正在检查TADOConnec
ADOConnection1.Execute('SET NOCOUNT ON; SELECT 0; THROW 50000, ''Custom error'', 1;');
上面的代码不会抛出,因为存在由SELECT 0导致的结果集代码>
在这种情况下,如何强制TADOConnection抛出异常?我无法避免返回结果集。我尝试过的事情:
- 处理
OnInfoMessage
事件,但它从未被激发
- 正在检查TADOConnection.Errors属性,但其中没有错误
我发现了一篇针对这个问题的文章,但它与.NET有关:
我可以使用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;
谢谢,现在如果没有返回结果集,我就有问题了。ADOQuery1.Open在这种情况下不起作用。我想没有通用的方法来处理这两种情况。如果没有更多答案出现,将接受此答案。这可能不是最好的解决方案,但如果您知道每次编写查询时是否可以返回结果集,则可以选择是否使用ADOQuery。不幸的是,在一个关闭的ADOQUERY上执行NextRecordSet
是不可能的。这可能是一个愚蠢的建议,但如何始终将select 0
添加到查询中?我认为对于不返回结果集的语句,应该使用TADOCommand。我希望您能够控制执行哪种语句,这样您就可以决定使用哪种组件了。@GuidoG一点也不愚蠢,我已经尽可能地使用了它:)