6

我正在使用带有 ADO 的 Delphi 2007 来访问 SQL Server 2008 数据库。

数据库上的存储过程预先验证输入,如果验证失败,则返回错误结果集(包含自定义错误信息)。使用 SQL Server Management Studio,当我运行存储过程时,我在一个选项卡中获得自定义错误结果集,在另一个选项卡中获得本机错误消息。

回到我的 Delphi 应用程序,当我打开存储过程时,我可以访问自定义错误结果集。但是,ErrorsADO 连接上的对象不包含本机错误。

如何访问Errors集合对象,以便提供有关错误原因的更多信息?

谢谢

4

1 回答 1

5

选项 1) 使用 ADO 连接错误集合。

try
....
....
....
 ADOQuery1.Open;//Execute your sql statement
except
  LastErrorIndex  :=ADOConnection1.Errors.Count-1;
  SourceError     :=ADOConnection1.Errors.Item[LastErrorIndex].Source;
  NumberError     :=ADOConnection1.Errors.Item[LastErrorIndex].Number;
  DescriptionError:=ADOConnection1.Errors.Item[LastErrorIndex].Description;
  SQLStateError   :=ADOConnection1.Errors.Item[LastErrorIndex].SQLState;
  NativeError     :=ADOConnection1.Errors.Item[LastErrorIndex].NativeError;
end;

选项 2)您可以使用 @@error 变量从 sql server 获取最后一个错误。

select @@error

当 Sql Server 发生错误时,您只能使用@@ERROR 全局变量获取错误号。没有@@ERROR_MESSAGE 全局变量来获取错误描述。对于完整的错误消息,您可以使用错误号查询 master..sysmessages 表:

SELECT Description FROM master..sysmessages  WHERE error= @@ERROR AND msglangid=1033

但这些消息中的大多数都有占位符(如 %s、%ld),您也可以使用此存储过程

您可以阅读这篇文章SQL Server 中的错误处理 - 背景了解更多信息。

再见。

于 2009-09-21T22:33:39.383 回答