在链接服务器中查询问题-事务隔离级别“ SNAPSHSHOT”不支持远程访问

时间:2019-02-03 05:40:06

标签: c# sql-server axapta linked-server

我的问题是我要从查询中的当前SQL Server和Linked Server数据库表联接表。

我试图在MS SQL Server中查询它,没关系,没问题。但是当我用C#尝试时,它产生了一个错误。我担心尝试其他解决方案,因为这是我搞砸的关键时刻。

Linked Server数据库是Microsoft Dynamics AX中的标准数据库,我想我不应该为了使任务正常工作而对其进行更改。

我只想与大家仔细检查一下,我正在寻找您的建议。您认为SET ALLOW_SNAPSHOT_ISOLATION ON是最好的解决方案吗?

https://imgur.com/a/uJBmunz

我的预期结果是无错误地执行我的查询。

1 个答案:

答案 0 :(得分:0)

似乎您已加入分布式事务。该错误告诉您SQL Server不支持您要执行的操作,因此,我建议的替代方法是将事务隔离级别更改为其他内容,例如READ COMMITTED

如果您使用System.Trasactions进行交易控制,请尝试以下操作:

var transactionOptions = new TransactionOptions
{
    IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
};

using (var tran = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{
    // Database access logic goes here...
}

或者如果您使用的是SqlTransaction类:

using (var cn = new SqlConnection())
{
    cn.Open();
    using (var tran = cn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted))
    {
        // Database access logic...
    }
}

您可以在官方SQL Server文档中找到更多详细信息: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/begin-distributed-transaction-transact-sql?view=sql-server-2017#remarks

您可以看到分布式事务不支持“快照隔离”。