我的问题是我要从查询中的当前SQL Server和Linked Server数据库表联接表。
我试图在MS SQL Server中查询它,没关系,没问题。但是当我用C#尝试时,它产生了一个错误。我担心尝试其他解决方案,因为这是我搞砸的关键时刻。
Linked Server数据库是Microsoft Dynamics AX中的标准数据库,我想我不应该为了使任务正常工作而对其进行更改。
我只想与大家仔细检查一下,我正在寻找您的建议。您认为SET ALLOW_SNAPSHOT_ISOLATION ON是最好的解决方案吗?
我的预期结果是无错误地执行我的查询。
答案 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
您可以看到分布式事务不支持“快照隔离”。