存储过程中的异常管理?

时间:2009-08-04 20:47:22

标签: asp.net sql-server stored-procedures exception-handling

我继承了一个带有 lot 存储过程的应用程序,其中许多都有异常处理代码,它在错误表中插入一行并发送一个DBMail。我们在ASP.NET方面有ELMAH,所以我想知道是否有必要在存储过程中进行异常管理。但在我把它撕掉之前,我想确保我不会因为对最佳做法的无知而犯下严重的错误。

只有一个应用程序使用存储过程。

什么时候更喜欢在SQL Server 2005存储过程中使用异常管理来处理ASP.NET端的异常?

3 个答案:

答案 0 :(得分:1)

如果有其他应用程序使用这些存储过程,那么在存储过程中保留错误处理可能是有意义的。在您的编辑中,您指出不是这种情况,因此删除异常处理可能不是一个坏主意。

MSDN article Exception Handling中概述了何时捕获异常以及何时让它们冒泡堆栈。可以说,处理和记录可从存储过程中恢复的数据库异常是有意义的。

答案 1 :(得分:1)

有一个原则有时被称为“首次故障数据捕获” - 即。它是第一个“代码块”的责任,它识别错误以立即捕获它以供将来诊断。在多层体系结构中,这会导致一些关于“第一”实际上是谁的有趣问题。

我认为存储过程将某些内容记录到数据库是非常合理的(发送电子邮件听起来有点过分,除了最关键的错误,但这是另一个问题)。它不能假设更高层的表现很好,你现在可能只有一个客户,但你无法预测未来。

存储过程仍然可以抛出异常以及记录。有时在困难的情况下能够关联不同层中的错误实际上非常方便。

我会花很多时间去除错误记录。

答案 2 :(得分:0)

我认为记录到表只适用于在一个存储过程调用中完成所有操作的简单系统。

一旦系统足够复杂,您可以跨数据库调用实现事务,那么在存储过程中记录到数据库会变得更加困难。

回滚撤消记录到表。

在我看来,允许回滚和记录的逻辑会产生太多的缺陷。