“什么!你要同时操作SQL Server、Oracle、DB2?”
         用户的需求总是变态的,同时操作,分布式事务,唉越想越头疼。
        没办法,MSDTC映入眼帘,还好,有东西能帮我们解决,但这个东西调通实在不易,关防火墙,卸杀毒软件,改注册表,改host文件,还好终于通了(配DTC的方法,网上搜吧)
         好,终于开始用他写东西了,恩,微软就是微软,什么东西都做的这么简单,DTC也封装的很好,简单易学,或者你根本不用了解什么叫DTC,会学sql语句就行了。那到底怎么写呢?
MSDTC编程入门        private void ExecuteMSDTC()
        }

 

     呵呵,就这么简单咯,用ServiceConfig来使你的代码进入DTC执行状态,然后后面的东西都是在DTC里执行的咯,ContextUtil.SetComplete()来提交这个事务,当然了,这只是段示意代码,要加个try,如果出错,就让他回滚ContextUtil.SetAbort()。在进入DTC和提交之间的这个区域,你所有new的连接都将是在DTC中执行,你可以全部回滚它们,这样的分布式事务就OK咯。

    嘿嘿,众所周知,DTC是Com+的服务,也就是说,刚才的两个conn都是在com+的某个context下执行的。于是微软为我们提供了另一个东东来执行这个DTC咯。那就是ServicedComponent+TrancationAttribute,我们再来看如何实现这个东西呢?

MSDTC编程入门    [Transaction(TransactionOption.Required, Timeout = 1000)]
MSDTC编程入门    
public class DTCManager : ServicedComponent
    }


      恩,这里用了个代理来实现方法的执行,这样更灵活一些吧,hoho。既然是Com+的东西当然要注册了,不过你不用去手动注册的DLL,那个命令我不会-_-b.......还好微软帮我们做咯,ServicedComponent会自动注册,So,你只需要把你的程序集强命名咯。Yes,就这么简单。
        再加一点这个东西的简单测试:
 
, oConnection);
            cmd.ExecuteNonQuery();
            conn.Close();
        }

Over了,客户变态的需求啊,永远满足不了,唉。。。。

最后再提醒几个问题,Orcale的DTC不支持DDL语句,也就是说,你不能在事务里面执行CreateTable等操作。DB2的问题更恶心,不能修改表,可能是我才疏学浅吧,不过我用DB2的管理器修改表都报错,我晕菜,唉~~~~

相关文章:

  • 2021-08-12
  • 2021-06-30
  • 2021-09-12
  • 2021-08-21
  • 2021-12-11
  • 2021-04-09
  • 2021-11-26
猜你喜欢
  • 2021-11-23
  • 2021-11-28
  • 2021-11-18
  • 2021-11-23
  • 2021-11-27
相关资源
相似解决方案