请教跨数据库事务的问题

彗星 2012-04-24 08:18:08
现在有两张表,分别在不同的数据库,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#代码的方式去实现,请问还有其他方法吗?
...全文
135 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
avi9111 2012-04-25
  • 打赏
  • 举报
回复
连接的代码很工整,也看不出什么错C#

你有没试过,不执行ONE,就是connection one, remark掉

只执行Two,会有这个问题么。

如果没有,说明2个connection有冲突

广交天下好友 2012-04-25
  • 打赏
  • 举报
回复

以下示例首次创建将在此后的示例中使用的同义词。

USE tempdb;
GO
CREATE SYNONYM MyAddressType
FOR AdventureWorks.Person.AddressType;
GO
以下示例将行插入到由 MyAddressType 同义词引用的基表。

USE tempdb;
GO
INSERT INTO MyAddressType (Name)
VALUES ('Test');
GO




这样写跟平时插入同库 数据是一样的。底层不需要你改变。

上面展示 两库 的操作
彗星 2012-04-25
  • 打赏
  • 举报
回复
我知道可以用数据库同义词,现在的问题是项目已经封装好底层的方法了,比如new commonda("数据库名").add(object)就插入这个数据库了,如果重新写的话那要自己写一套出来还要写sql语句,这样会给开发人员增加负担
广交天下好友 2012-04-24
  • 打赏
  • 举报
回复
数据库建同义词 ,可以不需要 跨数据库 这样插入的。

你的那例子有些死板
彗星 2012-04-24
  • 打赏
  • 举报
回复
不好意思,使用插入源代码有点问题,附上我参考的链接
http://www.cnblogs.com/pengwenbing/archive/2010/08/30/1812482.html

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧