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

标签 sql-server sql-server-2008 delphi ado

执行包含多个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/

相关文章:

java - JDBC 附加程序的 Log4j2 MDC 配置

c# - 安装了SQL Server(标准版)如何通过代码获取服务器名称

sql-server-2008 - SQL 性能 - 按多个字段分组

sql - 如果 B 列为 Null,如何从 A 列插入数据;如果 A 列为 Null,如何从 B 列插入数据

multithreading - Delphi:系统错误1158的原因(当前进程没有更多的系统句柄)

sql - 在具有日期限制的 SQL 记录中搜索

php - 使回显结果可点击并运行新查询

sql - 计算列什么时候合适?

delphi - 如何使用 Delphi7 使用 VFrames(TVideoImage) 从网络摄像头获取快照

multithreading - 如何在多线程中调用递归函数