gpt4 book ai didi

sql-server - 在Delphi中使用ADO使用多个INSERT,UPDATE等语句执行SQL脚本时的错误处理

转载 作者:行者123 更新时间:2023-12-03 18:41:03 25 4
gpt4 key购买 nike

执行包含多个INSERT,UPDATE,...语句的SQL脚本时,在Delphi / ADO错误处理方面遇到困难。只有当脚本的第一个SQL语句失败时,Delphi才会出现异常。如果第一条语句通过,则Delphi中将没有异常,无论脚本中发生了什么。

这是我使用的Delphi代码:

var
DataSet: TADOQuery;
begin
...
try
DataSet.Close;
DataSet.ParamCheck := true;
DataSet.SQL.LoadFromFile(FileName);
DataSet.Prepared := true;
try
DataSet.ExecSQL;
finally
DataSet.Close;
end;
except
on E: Exception do
Logging.AddText(E.ClassName + ' error raised when executing ' + FileName + '. Message: ' + E.Message);
end;
...
end;


为了测试,我使用了以下简单脚本:

INSERT INTO TESTTABLE
VALUES ('John', 24);

INSERT INTO TESTTABLE
VALUES ('Ed', '32');


其中,TESTTABLE只是一个简单的表,其中包含两列:名称NVARCHAR(50)和Age INT。

例如,当您在第一个INSERT语句中用“ twentyfour”替换24并使用Delphi代码运行脚本时,Delphi / ADO将引发异常。但是,当您在第二条INSERT语句中将“ 32”替换为“ thirtytwo”时,将不会有异常。

我试图通过将脚本放入存储过程“ dbo.ErrorHandling”中并发送来解决此问题

EXEC dbo.ErrorHandling


到ADO,但没有帮助。

CREATE PROCEDURE dbo.ErrorHandling
AS
BEGIN
INSERT INTO TESTTABLE
VALUES ('John', 24);
INSERT INTO TESTTABLE
VALUES ('Ed', '32');
END


我可以通过在脚本中使用TRY和CATCH并让其将错误记录到LOGGING表中来解决该问题。每次执行脚本后,Delphi可以检查此表中是否有新错误。

但是,是否有可能在Delphi中捕获所有SQL Server错误,还是我必须一一执行INSERTS,UPDATES ...?

我使用Delphi XE6和SQLServer 2008 R2

最佳答案

我不会看AdoConnection的错误集合。
TAdoConnection.Errors

关于sql-server - 在Delphi中使用ADO使用多个INSERT,UPDATE等语句执行SQL脚本时的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26716794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com