2011-08-05 48 views
1

我需要实现从一个数据库读取数据并在两个其他数据库(Db2和Db3)中插入/更新数据。所有数据库都是SQL Server。ADO.NET和使用不同的数据库

现在我使用的下一个情景:

  • 打开连接,并为我的源数据库开始交易。

    1.1打开连接,并为DB2

    1.2插入/更新记录开始交易。

    1.3提交/回滚事务

    2.1打开连接和DB3

    2.2插入/更新记录开始交易。

    2.3提交/回滚事务

  • 标记记录在源数据库导出。

  • 提交事务。

一切工作正常。但是如果我在1.2或2.2步中出现异常,则当前事务将被回滚,但其他步骤中的事务将保持承诺。

如何在步骤(1.2或2.2)有异常时执行方案,步骤1.3和2.3的 也会回滚?

我不能用一个交易,DB2和DB3,因为我有例外

交易或者未与当前连接 相关的或已经完成。

任何想法?

感谢,

更新: 我解决我的问题: 现在我使用的下一个情景:

  • 打开连接,并为我的源数据库开始交易。

    1.1打开连接和用于DB1

    启动事务

    1.2打开连接并用于DB2

    启动事务

    在DB1 1.3插入/更新

    1.4插入在DB2 /更新

    1.5提交/回滚事务Db1

    1。6 Db2提交/回滚事务

  • 将源记录中的记录标记为导出。

  • 提交事务。

+0

你如何处理时DB1交易成功和DB2交易失败? – Eranga

回答

1

可以使用TransactionScope类与一个分布式事务中的多个数据库进行交互。

using (TransactionScope scope = new TransactionScope()) 
{ 
    //put all logic here 
    scope.Complete(); 
} 

这里还有一个example

+0

是否有可能在没有TransactionScope的情况下解决我的问题? – ukraine

+0

@ukraine您可以使用[System.EnterpriseServices](http://msdn.microsoft.com/en-us/library/system.enterpriseservices.aspx)这里有一个[示例](http://www.codeproject.com/ KB/DOTNET/KdotNET.aspx)。但'TransactionScope'方法很简单。 – Eranga

相关问题