Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在多个数据库上实现事务_.net_Sql Server_Database_Transactions - Fatal编程技术网

.net 在多个数据库上实现事务

.net 在多个数据库上实现事务,.net,sql-server,database,transactions,.net,Sql Server,Database,Transactions,我正在多个数据库上执行数据更改,我希望实现一个涵盖所有更改的事务 这就是我目前拥有的: 试试看 { db[1]。begintransaction(); db[1]。ExecuteOnQuery(); db[2].begintransaction(); db[2]。ExecuteOnQuery(); ... db[N].begintransaction(); db[N].ExecuteNonQuery(); //仅当过程中未引发异常时才会执行 对于(int a=0;a

我正在多个数据库上执行数据更改,我希望实现一个涵盖所有更改的事务

这就是我目前拥有的:

试试看
{
db[1]。begintransaction();
db[1]。ExecuteOnQuery();
db[2].begintransaction();
db[2]。ExecuteOnQuery();
...
db[N].begintransaction();
db[N].ExecuteNonQuery();
//仅当过程中未引发异常时才会执行
对于(int a=0;a
问题是,如果在
Commit()
(请参阅注释)期间发生异常,上述操作将严重失败。有没有更好的方法来完成这个任务?

像这样使用这个类:

using (TransactionScope ts = new TransactionScope())
{
    //all db code here

    // if an error occurs jump out of the using block and it will dispose and rollback

    ts.Complete();
}

TransactionScope类将在必要时自动转换为分布式事务。

正如cletus所说,您需要某种类型的事务。正如文章所述,这在实践中并不总是有效的。如果您需要一个健壮的解决方案,那么您必须找到一种序列化事务的方法,这样您就可以一个接一个地执行事务,并单独回滚它们


由于这取决于您没有提供任何详细信息的具体情况,因此我无法告诉您如何解决此问题。

如果您希望跨多个SQL Server实例执行事务,请查看文档,使用transactionScope是答案。它甚至可以与不同的DBMS一起工作


注意:这不是实际代码。为了Clarity我对它进行了重大修改Hey我也有同样的问题。。。我的数据库可以是Mysql和Sql Server。。。它能与TransactionScope一起工作吗?@Jesse,我认为对于跨数据库的事务,即使是在最新版本的.Net中,也需要Microsoft分布式事务协调器。我不明白你为什么说不需要它?@Sunil你完全正确。这是当时我对.NET框架的误解。我将着手删除错误的评论。谢谢你通知我!=)