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# 代码里在开启事务查询时强制给查询的数据加排他锁???
使用 TABLOCKX
myCommand.CommandText = "select * from Categories WITH(TABLOCKX) where categoryid=1";
在sql 语句里面加吗?
@薛定谔家的猫: 是的
@dudu: 那我在c#提交事务 那行数据会不会解除锁 ,其实不解的是用c#代码给查询 加了锁 但没有用
@薛定谔家的猫: 会解锁,上面的C#代码中并没有给查询添加排他锁
不用加锁,直接查询即可。如果你用的sql server,查询默认隔离级别为 read committed, 正在更新的记录是无法读的,会被阻塞。