ASP.NET数据库错误陷阱

时间:2009-05-09 17:20:17

标签: .net ado.net exception-handling

我很好奇人们如何在.NET中捕获某些数据库错误,特别是外键或唯一索引违规。来自经典的ASP / VB背景,我的第一个倾向是测试错误号,然后向用户创建一个友好的消息,说明出错了。但是,我认为在.NET世界中,会出现像SqlForeignKeyException或类似的东西。如果存在这样的事情,我无法在任何地方的文档中找到它。你如何处理这些错误?

2 个答案:

答案 0 :(得分:1)

如果您的应用程序正在生成外键或唯一索引违规,则应用程序可能存在问题,并且您需要通知开发人员,而不是用户。也就是说,通常验证用户提供的输入应该可以防止抛出这些异常。

常见的方法是捕获Application_Error事件中的未处理错误,并将它们记录到文件或数据库中。还有一些工具可以帮助进行错误记录,例如ELMAH

对于用户来说,只需要一条通用消息......但开发人员应该密切关注错误日志。请参阅杰夫阿特伍德在Exception Driven Development上的帖子。

编辑:要回答问题的其他部分 - .NET中有各种不同的异常对象,但大多数SQL异常似乎都是通用的SqlException类。您可以通过检查Message和StackTrace()属性以及向下钻取InnerException属性来了解有关错误的更多信息。类似于外键违规的东西可能表现为HttpException,其中嵌套了SqlException。

答案 1 :(得分:1)

通过说SqlException,您必须使用SQL Server -

如果您想知道它是否是特定的外键错误,请检查SqlExceptions内部异常,check the Number property. This数字对应于master.dbo.sysmessages表中的条目,数字0到50000是SQL错误, 50000+是用户定义的。

不要忘记iterate through the collection of errors - SQL可以返回多个。

如果您使用return value, check that as well。您必须阅读TSQL源代码,以查看是否正在使用这种特殊的错误报告方式。

警告是10级或更低级别的错误,必须通过SqlInfoMessage事件捕获。

如果程序返回@@ error,make sure that it is preserved,因为@@ error错误将重置为批处理中下一个后续命令的成功。

相关问题