.NET 数据访问架构指南13

时间:2010-02-01 10:02:28  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:装在外部例外中,并传递回调用者。也可以将异常封装在对调用者更有意义的异常类型中。     异常如果不能传递,将导致对象不会提出取消事务,从而忽视数据库错误。这意味着共享同一事务流的其它对象的成功操作将被提交。        下面的代码缓存了SqlException,然后将它直接传递回调用者。事务处理最终将被取消,因为对象的一致性标...
  正文: AutoComplete方法
  
    对于标记了属性的方法,执行下面操作:
  
  将SqlException传递加调用堆栈。
  
  
  将SqlException封装在外部例外中,并传递回调用者。也可以将异常封装在对调用者更有意义的异常类型中。
    异常如果不能传递,将导致对象不会提出取消事务,从而忽视数据库错误。这意味着共享同一事务流的其它对象的成功操作将被提交。
  
    下面的代码缓存了SqlException,然后将它直接传递回调用者。事务处理最终将被取消,因为对象的一致性标志在对象变为非活动状态时自动被设为假。
  
  [AutoComplete]
  void SomeMethod()
  {
  try
  {
  // Open the connection, and perform database operation
  . . .
  }
  catch (SqlException sqlex )
  {
  LogException( sqlex ); // Log the exception details
  throw; // Rethrow the exception, causing the consistent
  // flag to be set to false.
  }
  finally
  {
  // Close the database connection
  . . .
  }
  }
  
    Non-AutoComlete方法
  
    对于没有AutoComplete的属性的方法,必须:
  
  在catch块内调用ContextUtil.SetAbort以终止事务处理。这就将相容标志设置为假。
  
  
  如果没有发生异常事件,调用ContextUtil.SetComplete,以提交事务,这就将相容标志设置为真(缺省状态)。
    代码说明了这种方法。
  
  void SomeOtherMethod()
  {
   try
   {
    // Open the connection, and perform database operation
    . . .
    ContextUtil.SetComplete(); // Manually vote to commit the transaction
   }
   catch (SqlException sqlex)
   {
    LogException( sqlex ); // Log the exception details
    ContextUtil.SetAbort(); // Manually vote to abort the transaction
    // Exception is handled at this point and is not propagated to the caller
   }
   finally
   {
    // Close the database connection
    . . .
   }
  }
  
    注意 如果有多个catch块,在方法开始的时候调用ContextVtil.SetAbort,以及在try块的末尾调用ContextUtil.SetComplete都会变得容易。用这种方法,就不需要在每个catch块中重复调用ContextUtil.SetAbort。通过这种方法确定的相容标志的设置只在方法返回时有效。
  
    对于异常事件(或循环异常),必须把它传递到调用堆栈中,因为这使得调用代码认为事务处理失败。它允许调用代码做出优化选择。比如,在银行资金转账中,如果债务操作失败,则转帐分支可以决定不执行债务操作。
  
    如果把相容标志设置为假并且在返回时没有出现异常事件,则调用代码就没有办法知道事务处理是否一定失败。虽然可以返回Boolean值或设置Boolean输出参数,但还是应该前后一致,通过显示异常事件以表明有错误发生。这样代码就有一种标准的错误处理方法,因此更简明、更具有相容性。

.NET 数据访问架构指南13》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12701.html


关键字:

关于《.NET 数据访问架构指南13》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td