现在有两张表,分别在不同的数据库,table1在db1数据库中,table2在db2数据库中,现需要在这两张表中做插入事务操作,我在网上看了下,可以通过分布式事务进行提交,具体代码如下:
try            {                 using (TransactionScope scope = new TransactionScope())                 {                    //更新northwind数据库的Employees表                                         using (SqlConnection conOne = new SqlConnection("server=.;uid=sa;pwd=123;database=northwind"))                     {                         conOne.Open();                         SqlCommand command = new SqlCommand("update Employees set lastname='chen' where employeeid='1'", conOne);                         int i = command.ExecuteNonQuery();                     }                    //更新pubs数据库的jobs表                                      using (SqlConnection conTwo = new SqlConnection("server=.;uid=sa;pwd=123;database=pubs"))                     {                         conTwo.Open();                         SqlCommand command = new SqlCommand("update jobs set job_desc='chen' where job_id='1'", conTwo);                         int i = command.ExecuteNonQuery();                     }                     scope.Complete();  //提交事物                                }             }             catch (Exception ex)       //发生异常后自动回滚                         {                 //throw;                        }但是程序运行到conTwo.Open(); 的时候就报“卸载Appdomain 时出错。 (异常来自 HRESULT:0x80131015)”的错误,请高手指教下这是为什么?
还有一点我知道可以通过存储过程去实现跨库之间的事务操作,但是我想通过c#代码的方式去实现,请问还有其他方法吗?

解决方案 »

  1.   

    不好意思,使用插入源代码有点问题,附上我参考的链接
    http://www.cnblogs.com/pengwenbing/archive/2010/08/30/1812482.html
      

  2.   

    我知道可以用数据库同义词,现在的问题是项目已经封装好底层的方法了,比如new commonda("数据库名").add(object)就插入这个数据库了,如果重新写的话那要自己写一套出来还要写sql语句,这样会给开发人员增加负担
      

  3.   


    以下示例首次创建将在此后的示例中使用的同义词。USE tempdb;
    GO
    CREATE SYNONYM MyAddressType
    FOR AdventureWorks.Person.AddressType;
    GO
    以下示例将行插入到由 MyAddressType 同义词引用的基表。USE tempdb;
    GO
    INSERT INTO MyAddressType (Name)
    VALUES ('Test');
    GO
    这样写跟平时插入同库 数据是一样的。底层不需要你改变。上面展示  两库 的操作
      

  4.   

    连接的代码很工整,也看不出什么错C#你有没试过,不执行ONE,就是connection one, re掉只执行Two,会有这个问题么。如果没有,说明2个connection有冲突