【问题标题】:Undocumented Exceptions in Enterprise Library企业库中未记录的异常
【发布时间】:2025-12-16 16:45:02
【问题描述】:

我正在使用 Enterprise Library 的 DAAB 访问数据库,使用 ExecuteReaderExecuteNonQuery。问题是这些方法没有记录抛出的异常......那么,我怎样才能知道我应该捕获哪些异常?

【问题讨论】:

  • 我很好奇为什么你认为你需要捕获所有可能的异常?抛出的特定异常取决于您的数据库提供商,因为大多数错误可能是数据库或网络(连接等)异常。此外,大多数异常将是系统异常,我认为除了记录和可能让用户知道存在错误之外,您无能为力。

标签: exception enterprise-library


【解决方案1】:

我同意 WebTurner 的观点,我猜从您连接到哪个数据库开始是个不错的选择,所以如果是 ms sql 数据库,我猜有几个(也许很多)例外:

  • SqlException
  • InvalidOperationException

http://msdn.microsoft.com/en-us/library/9kcbe65k.aspx


编辑:

我刚刚遇到这个:How can I determine which exceptions can be thrown by a given method?

这看起来很像,它使用反射来帮助发现抛出的异常列表。

【讨论】:

  • 实际上你所做的是找出一个较低级别的操作和服务器类型将返回哪些异常。这不是一个糟糕的开始,但您需要检查 EL 中的整个实现以找到引发的异常。
  • 完全同意@webturner,感谢您添加的详细信息。这只是一个开始,但肯定不够彻底。
【解决方案2】:

问题是有很多异常会在比企业库更低的级别抛出,EL 不可能记录所有这些。

我建议您使用异常处理和日志记录块来捕获和记录所有异常。然后,您可以查看发生了哪些异常并调整异常处理程序的配置或添加新代码来处理特定的异常。

【讨论】:

  • 问题是我已经在“手动”捕获和处理许多不同的异常......我能否让它们适应新的处理块?
  • 是的,虽然当我从手动异常处理切换并最终掌握企业库时,我发现我大量减少了所需的异常处理代码量,并且对引发的异常有更好的覆盖在代码中。