首页新闻找找看学习计划

c#开启事务查询数据为什么没有给查询的数据行加锁? 行是可以修改这样不是幻读了吗?

0
悬赏园豆:10 [已解决问题] 解决于 2018-09-06 11:24
SqlConnection myconnection = new SqlConnection(SqlDapperHelper.connStrWrite);
myconnection.Open();
SqlTransaction myTrans = myconnection.BeginTransaction();
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = myconnection;
myCommand.Transaction = myTrans;
myCommand.CommandText = "select * from Categories where categoryid=1";
myCommand.ExecuteNonQuery();
myTrans.Commit();

修改该数据行是有排他锁的 但是查询就没有 默认的共享锁吗?

我该怎么在c# 代码里在开启事务查询时强制给查询的数据加排他锁???

痱子﹑的主页 痱子﹑ | 初学一级 | 园豆:117
提问于:2018-08-20 15:56
< >
分享
最佳答案
1

使用 TABLOCKX

myCommand.CommandText = "select * from Categories WITH(TABLOCKX) where categoryid=1";
收获园豆:10
dudu | 高人七级 |园豆:41299 | 2018-08-20 16:14

在sql 语句里面加吗?

痱子﹑ | 园豆:117 (初学一级) | 2018-08-20 19:08

@薛定谔家的猫: 是的

dudu | 园豆:41299 (高人七级) | 2018-08-20 20:36

@dudu: 那我在c#提交事务 那行数据会不会解除锁 ,其实不解的是用c#代码给查询 加了锁 但没有用  

痱子﹑ | 园豆:117 (初学一级) | 2018-08-21 08:02

@薛定谔家的猫: 会解锁,上面的C#代码中并没有给查询添加排他锁

dudu | 园豆:41299 (高人七级) | 2018-08-21 09:16
其他回答(1)
1

不用加锁,直接查询即可。如果你用的sql server,查询默认隔离级别为 read committed, 正在更新的记录是无法读的,会被阻塞。

沧海一杰 | 园豆:28 (初学一级) | 2018-08-21 15:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册