经验:使用.net 2.0中的TransactionScope碰到的问题

经验:使用.net 2.0中的TransactionScope碰到的问题

概述:不能在同一个TransactionScope中打开多个连接对象

TransactionScope真的是很方便的,具体的使用也很简单,MSDN上有详细描述。不过我在使用过程中发现了一个问题,那就是无法在同一个TransactionScope中打开多个连接对象。示例代码如下,示例中是连接到同一实例的同一数据库,但连接到不同实例的不同数据库也是同样的结果。

具体原因还需具体分析,我碰到的情况不一定代表就是正确的情况,还请大家批评。

[Test]
public void TestTransactionScope()
{
    using (TransactionScope ts = new TransactionScope())
    {
        string cnstr = @"Data Source=cs1\sqlexpress;Database=fugao_dev;User ID=sa;Password=123;";
        SqlConnection cn1 = new SqlConnection(cnstr);
        cn1.Open();

        using (TransactionScope ts2 = new TransactionScope())
        {
            SqlConnection cn2 = new SqlConnection(cnstr);
            cn2.Open();
        }
    }

}

[Test]
public void TestTransactionScopeA()
{
    using (TransactionScope ts = new TransactionScope())
    {
        string cnstr = @"Data Source=cs1\sqlexpress;Database=fugao_dev;User ID=sa;Password=123;";
        SqlConnection cn1 = new SqlConnection(cnstr);
        cn1.Open();


        SqlConnection cn2 = new SqlConnection(cnstr);
        cn2.Open();
    }

}

以上测试都抛出了异常,并且运行时间很长,象死机一下
System.Transactions.TransactionManagerCommunicationException : 与基础事务管理器的通信失败。
  ----> System.Runtime.InteropServices.COMException : 对 COM 组件的调用返回了错误 HRESULT E_FAIL。
posted @ 2008-04-14 13:21  andy.wu  阅读(3909)  评论(16编辑  收藏  举报