我为我的应用程序编写了许多存储过程。某些存储过程根据项目要求返回验证异常,而在某些情况下,存储过程会返回未处理的致命错误,例如
“外键引用错误”,“期望未提供的参数”等。
现在我需要区分C#代码中的错误。如果出现未处理的致命错误,我需要在数据库中插入错误日志。
关于如何区分这两种类型的任何建议。
注意:我使用RAISERROR语句返回验证异常,如
RAISERROR(@ErrorMsg,16,1)
更新1:
我想每个人都错误地解释了我的实际问题。 我可能会得到用户定义的验证异常(由RAISERROR stmt返回)或SP内的查询执行导致的致命错误。我需要在C#代码中区分这两种类型。
中都有两个例外catch (SqlException ex)
块。经过一些研究,我发现ex.Number在用户定义的验证异常的情况下是50000,在其他情况下,它是不同的。
我正在考虑为此写条件。如果有任何清洁方法,请建议。
答案 0 :(得分:0)
你应该为这个陈述设置id的值。
发生此错误,因为正在排除外键的ID或因为语句中没有插入id
答案 1 :(得分:0)
在C#代码中使用Try Catch Block并从存储过程中删除RAISERROR(@ ErrorMsg,16,1)。
您可以在catch块中获取确切的错误消息并验证它并写入日志。