处理ObjectDataSource异常的最佳方法是什么?

时间:2009-04-18 12:17:17

标签: c# asp.net objectdatasource

我在ASPX页面中有一个ObjectDataSource,它从业务逻辑类调用CRUD操作。当在这些操作期间发生异常时,我想告知用户错误并记录它们。但我想要在业务逻辑和表示层之间进行明确的分离。我知道Selected,Inserted,Updated,Deleted事件提供了ObjectDataSourceStatusEventArgs类型的参数,其中包含发生异常的属性“Exception”。

这些事件的处理程序是处理ObjectDataSource异常的最佳位置还是有更好的方法?事件参数链的Exception属性是否在操作期间发生了所有异常?

欢迎提出任何意见或建议,

谢谢,

库伦

2 个答案:

答案 0 :(得分:2)

当您的Biz层对象执行的CRUD操作期间引发异常时,它应由Biz对象处理,但部分处理。这是因为您希望反馈到达表示层(并且您还想记录错误)。因此,你可以:

一个。按原样重新抛出异常。这会将其冒充到您的表示层。

湾将名称 - 值数据对添加到异常的Data属性,然后重新抛出它。

℃。将引发的异常包装到自定义异常类型中并抛出它。

然后将此异常冒泡到您的ObjectDataSource,并通过Selected / Inserted / Deleted / Updated事件处理程序中的ObjectDataSourceStatusEventArgs.Exception属性提供。然后,您应该检查此属性是否为空。如果没有,ObjectDataSource在TargetInvocationException包装器中包装任何异常(是的,复数!),因此您可能需要获取InnerException。

然后,您可以修改UI元素,以便向用户提供操作未成功完成的必要反馈。此外,您需要将ExceptionHandled属性设置为True,以防止异常冒泡到页面级别。

至于记录异常,就个人而言,我会在两个层中记录错误--Business逻辑层和表示层。

答案 1 :(得分:0)

如果自动调用业务逻辑层中的方法,我会使用这些事件。

我认为这些事件的目的是:以某种自定义方式显示错误。

但我不会自动调用逻辑层中的方法。相反,我将通过代码调用它们,并返回一个布尔值,指示操作是否成功。

插入/更新Person时的类似内容:

if (Person.Save(data)) {
  // show OK message
} else {
  // show error message
}

其中Person是相对于Person Data Access Layer类的BAL类。

希望得到这个帮助。