【问题标题】:Transaction for different databases不同数据库的事务
【发布时间】:2012-07-29 19:52:20
【问题描述】:

我在我的项目中使用 2 个不同的 dll 连接到 2 个数据库。每个 dll 都有自己的 DAL 层。

现在在一个页面中,我需要将一组相关数据插入到这 2 个数据库中。我想使用事务来确保正确插入数据。但因为我只能访问每个程序集的 Insert() 的公共方法,而不是 ADO.net 代码。我该如何处理这种情况? c#中有这样的东西吗?

beginTransaction(){
  dll1.class.Insert(data);
  dll2.className.Insert(relatedData);
  ....
}

【问题讨论】:

    标签: c# asp.net transactions transactionscope


    【解决方案1】:

    您正在寻找TransactionScope 类:

    使代码块具有事务性。

    示例用法:

    using (var tx = new TransactionScope())
    {
      dll1.class.Insert(data);
      dll2.className.Insert(relatedData);
    
      tx.Complete(); // if not executed, transaction will rollback
    }
    

    作为@Anders Abelcommented,运行事务中涉及的数据库的服务器将需要MSDTC 服务在数据库服务器和客户端计算机上运行和正确配置。 DTCPing 实用程序在这方面非常有用。

    作为Steve Bcommented,这里假设所有数据库和相关驱动程序都支持分布式事务登记。检查您的文档...

    【讨论】:

    • 请注意,使用TransactionScope 使事务跨越两个数据库将需要在数据库服务器上运行 MSDTC 服务,并具有正确的网络配置(在非域环境中获得安全可能会很棘手)。
    • @AndersAbel - 是的。这就是DTCPing 的天赐之物。
    • 并且还假设两个数据库驱动支持分布式事务登记。您正在使用的数据库是什么?
    • 我在共享主机上使用 sql server 2008 吗?这些足以应付这种情况吗?
    • SQL Server 2008 可以解决这个问题。共享主机很可能是个问题 - 您需要与托管公司讨论这个问题(MSDTC 充其量是棘手的,我不知道大多数托管公司都在做什么)。
    猜你喜欢
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2013-11-11
    • 2023-03-15
    • 2020-06-05
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多