当前位置:编程学习 > C#/ASP.NET >>

TransactionScope 锁表

为什么我在程序中指定了TransactionScope的隔离级别ReadCommitted,事务中的表还是被锁定不能查询了?貌似设置成ReadUncommitted等别的也没用
TransactionOptions option = new TransactionOptions();
                option.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
                using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, option))
{

--这块更新的表被锁了。
} --------------------编程问答-------------------- 你为什么要指定 TransactionOptions 那,那个东西不好乱指定的。 --------------------编程问答-------------------- 你 解锁吧,或是 回滚。 --------------------编程问答-------------------- 没人知道吗? --------------------编程问答-------------------- sqlserver就是这个样子的。
一旦记录更新后,就会加上互斥锁(exclusive lock),其他人读取就会block住,直到事务提交/回滚。
这是如果要读取而不阻塞的话,要用 SELECT * FROM <table> WITH(NOLOCK)
或者在另外一个事务中读取,另外一个事务的级别要低于ReadUncommitted。

在sql server中,执行下面的语句可以在表锁定时也能读数据:
alter database <youDatabaseName> set read_committed_snapshot on

话说事务不就是应该越短越好吗?长时间事务处理可能会带来消耗资源、阻塞、死锁等各种问题,应尽可能避免。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,