在c#中回滚

前端之家收集整理的这篇文章主要介绍了在c#中回滚前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有2个表查询和细节.
在保存按钮上单击我已经写
  1. fbsave();
  2. fbsavedetails();

fbsave()将数据保存在查询表中,fbsaveetails()将数据保存在详细信息表中.

现在如果在fbsavedetails()中发生错误,则两个步骤都应该回滚.

可能吗?

解决方法

您可以显式地创建一个交易并将其传递,即
  1. using(var connection = ...)
  2. {
  3. connection.Open();
  4. using (var tran = connection.BeginTransaction())
  5. {
  6. try
  7. {
  8. FBSave(connection,tran);
  9. FBSaveDetails(connection,tran);
  10. tran.Commit();
  11. }
  12. catch
  13. {
  14. tran.Rollback();
  15. throw;
  16. }
  17. }
  18. }

请注意,在这里,您还必须在每个命令上设置事务,因此为什么需要传递它,所有命令必须在同一个连接对象上.

或者:您可以使用TransactionScope;重要的是,Open()发生在TransactionScope内以获得自动登记:

  1. using(var tran = new TransactionScope())
  2. {
  3. FBSave();
  4. FBSaveDetails();
  5. tran.Complete();
  6. }

要么:

  1. using(var tran = new TransactionScope())
  2. using(var connection = ...)
  3. {
  4. connection.Open();
  5. FBSave(connection);
  6. FBSaveDetails(connection);
  7. tran.Complete();
  8. }

与TransactionScope方法,您不需要设置任何特殊的 – 大部分是自动的.您当然可以将连接传递到方法中,但也可以获取自己的连接,并且在大多数情况下它可以正常工作.

猜你在找的C#相关文章