RAISERROR并将错误消息返回给调用应用程序

时间:2009-12-11 19:53:19

标签: sql stored-procedures ado.net


假设Asp.Net应用程序调用过程dbo.ApprovePost并且@@ ERROR包含大于0的值,则将执行以下代码:


CREATE PROCEDURE dbo.ApprovePost
      …
IF @@ERROR > 0
 BEGIN
     RAISERROR(‘Approval of post failed’, 16, 1)
     ROLLBACK TRANSACTION ApprovePost
     RETURN 99
 END

COMMIT TRANSACTION ApprovePost


a)我对存储过程知之甚少,但我认为当RAISERROR引发错误时,RAISERROR之后没有代码会被执行,因为程序会在错误出现时退出吗?!

b)我假设RAISERROR函数会将错误信息返回给调用Asp.Net应用程序?

c)如果是这样,那么为什么过程还需要返回值99来表示失败(BTW-我假设这个值被返回给调用的Asp.Net应用程序)?

d)为什么价值99?为什么不是100或任何其他值?


感谢名单

1 个答案:

答案 0 :(得分:2)

调用严重性级别高于10的RAISERROR,在您的情况下为16,在ADO.NET中导致SqlException(严重级别10或更低级别仅为信息性消息),因此返回99除非捕获到异常并且您仍然可以访问SqlCommand对象上的返回参数(不确定它是否可访问 - 尚未测试),否则没有意义。

为什么99?这显然是调用代码的一些“神奇”值。