区分存储过程中的验证异常和未处理错误

时间:2017-12-06 13:13:51

标签: c# sql-server sql-server-2012

我为我的应用程序编写了许多存储过程。某些存储过程根据项目要求返回验证异常,而在某些情况下,存储过程会返回未处理的致命错误,例如

  

“外键引用错误”,“期望未提供的参数”等。

现在我需要区分C#代码中的错误。如果出现未处理的致命错误,我需要在数据库中插入错误日志。

关于如何区分这两种类型的任何建议。

注意:我使用RAISERROR语句返回验证异常,如

RAISERROR(@ErrorMsg,16,1)

更新1:

我想每个人都错误地解释了我的实际问题。 我可能会得到用户定义的验证异常(由RAISERROR stmt返回)或SP内的查询执行导致的致命错误。我需要在C#代码中区分这两种类型。

中都有两个例外
catch (SqlException ex)

块。经过一些研究,我发现ex.Number在用户定义的验证异常的情况下是50000,在其他情况下,它是不同的。

我正在考虑为此写条件。如果有任何清洁方法,请建议。

2 个答案:

答案 0 :(得分:0)

你应该为这个陈述设置id的值。

发生此错误,因为正在排除外键的ID或因为语句中没有插入id

答案 1 :(得分:0)

在C#代码中使用Try Catch Block并从存储过程中删除RAISERROR(@ ErrorMsg,16,1)。

您可以在catch块中获取确切的错误消息并验证它并写入日志。