小编mat*_*uez的帖子

SQLServer的.无法使ALLOW_SNAPSHOT_ISOLATION在c#代码中工作(它适用于Management Studio)

最近我不得不解决锁定问题,比如事务已经锁定资源与另一个进程死锁,并被选为死锁受害者.重新运行该交易.

在阅读了几篇文章并分析了我的系统背景后,我最终接受了最常用的解决方案: ALTER DATABASE MyDb SET READ_COMMITTED_SNAPSHOT ON; ALTER DATABASE MyDb SET ALLOW_SNAPSHOT_ISOLATION ON;

我想要ALLOW_SNAPSHOT_ISOLATION,因为这种隔离在我的系统上是有意义的.

我成功实现了https://www.databasejournal.com/features/mssql/article.php/3566746/Controlling-Transactions-and-Locks-Part-5-SQL-2005 "允许快照隔离"一节中描述的流程-Snapshots.htm在SQL Server Management Studio中的两个会话上.

伪代码:

SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN 1
select value from MyTable where ID=1 --reads original value 

  --On another session:
  BEGIN TRAN 2
  update mytable set value=2 where ID=1
  COMMIT TRAN2

-- back to session 1
select value from MyTable where ID=1 --still reads original value 
Run Code Online (Sandbox Code Playgroud)

上面的示例按预期工作.这告诉我数据库配置正确.

我的问题在于C#代码.虽然我能够防止锁定情况(READ_COMMITTED_SNAPSHOT正在工作),但我无法在我的c#代码上复制"允许快照隔离"行为.我尝试使用TransactionScope而没有它.我的目标是让它与TransactionScope …

c# sql-server transactionscope read-committed-snapshot

6
推荐指数
0
解决办法
314
查看次数