TransactionScope 锁表

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

--这块更新的表被锁了。
}
...全文
310 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jshi123 2012-11-01
  • 打赏
  • 举报
回复
sqlserver就是这个样子的。
一旦记录更新后,就会加上互斥锁(exclusive lock),其他人读取就会block住,直到事务提交/回滚。
这是如果要读取而不阻塞的话,要用 SELECT * FROM <table> WITH(NOLOCK)
或者在另外一个事务中读取,另外一个事务的级别要低于ReadUncommitted。

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

话说事务不就是应该越短越好吗?长时间事务处理可能会带来消耗资源、阻塞、死锁等各种问题,应尽可能避免。
xingyaohua 2012-11-01
  • 打赏
  • 举报
回复
没人知道吗?
XBodhi. 2012-10-31
  • 打赏
  • 举报
回复
你 解锁吧,或是 回滚。
XBodhi. 2012-10-31
  • 打赏
  • 举报
回复
你为什么要指定 TransactionOptions 那,那个东西不好乱指定的。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧