分布式事务中嵌套事务作用域时,连接服务器无法开始分布式事务

3

我有一个涉及到连接服务器的查询。该查询在SSMS中运行良好,在使用Dapper封装在C#中也能正常运行。

 var conn = GetOpenConnection(connInitializer);
 return query(conn);

这段代码在没有放入TransactionScope中时,可以得到预期的结果。但是,当我将代码放入TransactionScope中时,出现了问题。

using (var trans = new TransactionScope())
{
     var conn = GetOpenConnection(connInitializer);
     var returnValue = query(conn);
     trans.Complete();
     return returnValue;
}

我遇到了一个错误:

"由于OLE DB提供程序“SQLNCLI11”无法开始分布式事务,因此无法执行该操作,针对链接服务器xxx"

我需要修改一些SQL Server配置才能解决这个问题吗?

1个回答

3

由于您正在显式事务中执行查询,因此要求查询遵循这些ACID属性。您需要配置Microsoft Distributed Transaction Coordinator(MSDTC)以跨数据源管理事务。

如果查询最初在事务范围外起作用,则我猜测它是一个简单的选择。如果是这种情况,您可能需要为每个数据源打开单独的连接,在应用程序对象中加载所需数据,并从那里合并以产生结果。

否则,请准备排除MSDTC连接问题,并监视孤立事务的事务队列。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接