大家好。。请赐教 我的前台是C#后台是DB2 当然后台是什么无关紧要。
 
 我有两个数据库,分别都要写数据。。怎么实现他们之间的事务处理呢?

解决方案 »

  1.   

    建立两个连接
    Conn1.StartTrans();
    Conn2.StartTrans();
    try
    {
       对两个数据库进行操作
       Conn1.Commit();
       Conn2.Commit();
    }
    catch
    {
       Conn1.RollBack();
       Conn2.RollBack();
    }
      

  2.   

    可是这样并不能保证数据一致性当Conn1.Commit()提交成功。。而Conn2.Commit();
    提交时发生并不预见的意外。。那么Conn1.RollBack()时是没用的啊。因为Conn1提交后是不
    能再回滚的。
      

  3.   

    wangxianzhi(hansha) :
       一般情况下,如果SQL有错误,或者数据有错误,那么在对数据库操作时,就已经发声,Conn2.Commit();会100%成功。
       特殊情况下,如CONN1提交成功后,突然网络断开,导致Conn2.Commit();提交不成功的几率非常小,因为,Conn2.Commit();这个动作会很快。
      

  4.   

    你可以判断下,看Conn1.Commit();
       Conn2.Commit();
    把执行最快的放在后面,根据我的经验(在一个事务里操作2万多SQL),提交时间仍然小于0.1秒。
    另外,可以再优化下,针对Conn1提交成功Conn2提交失败做一个日志,方便以后维护。
      

  5.   

    我们以前就碰到这样的问题。而且一只没有解决。。
    在业务操作经常会发现数据的不完整让人非常头痛
    我的业务操作是不能让错误有可能的所以象你们讨论的这种情况。。虽然
    发生的机率不大。。但还是不小。。
      如果要解决这个问题。。除了COM+之外我想不到其它办法。。而COM+在运行时速度有些慢
    而且环境要求高。。在我开发的机器上能通过。。到了工作站上就不能通过。。一只没有解决。。
      

  6.   

    dts,也以前也这个问题,用com+可以做