软件里面已经开启了事务还没提交,但是在执行过程中,软件突然被强制关闭了,请问这种情况下,事务会回滚吗?

解决方案 »

  1.   

    如果执行完了就commit.没执行完rollback.
      

  2.   

    应该会的,你在继承IDispose,Dispose方法里判断回滚后关闭连接即可。
      

  3.   

    会发生回滚的,除非你COMMIT提交了
      

  4.   

    谢谢大家的回复,我的意思是这样子: 
    Begin
      Execute(sql1)
      Execute(sql2)
      Execute(sql3)
      .
      .
      .
    Commit
    (当中Execute函数都会有回滚的机制)
    如果执行过程中,软件被强制关了,但是还没有COMMIT,事务不知道会不会回滚
      

  5.   

    我觉得你没必要在每个EXECUTE函数里设置回滚的机制,你应该把几个EXECUTE函数作为一个整体事务来对待,也就是几个函数要么都执行,要么都不执行。可以统一写一个回滚的语句放在错误捕捉模块里,比如CATCH语句中:rollback。
    另外,你可以试着将这些EXECUTE函数都写在存储过程里,通过存储过程的事务来控制,程序里可以不使用事务。
      

  6.   

    只要SQL语句中有对错误的估计并编写了回滚,那么就会实现回滚。
      

  7.   

    要保险的话还是在事务中加上
    set    xact_abort   on但是在一般情况下 事务不提交就回滚