事务执行中,整个表都被锁住了吗?事务之外不能读了吗?
c# sql208
代码如下,第一步执行一个事务
/// <summary>
/// 第一个事务
/// </summary>
/// <returns></returns>
public string Trans()
{
System.Data.SqlClient.SqlConnection cnn = new System.Data.SqlClient.SqlConnection(ConnStr);
System.Data.SqlClient.SqlCommand cm = new System.Data.SqlClient.SqlCommand();
cm.CommandTimeout = 1;
cm.Connection = cnn;
cnn.Open();
System.Data.SqlClient.SqlTransaction trans = cnn.BeginTransaction();
cm.Transaction = trans;
try
{
//修改ID为1的用户name为张三
cm.CommandText = "update users set name='张三' where id=1";
cm.ExecuteNonQuery();
//…其他业务逻辑需求,可能时间比较长…………………
trans.Commit();
}
catch(Exception e)
{
trans.Rollback();
//return ErrorJSON("网络繁忙,请稍候再试!");
}
finally
{
cnn.Close();
trans.Dispose();
cnn.Dispose();
}
return RightJSON();
}
在执行第一个事务的同时,直接在SQL Server Management Studio,运行如下语句,没有用到事务(网站有些地方没有用到事务直接读取)
SELECT * FROM users where id=2
为什么一定要等到前面一个事务执行完了之后才可以读取出来,我这个ID不是等于2吗?
如果是执行id=1搜索需要等待我可以理解。
如果是这样的话,岂不是整个项目在事务执行过程中,其他的人都只能是等待。项目岂不是变成了单线程了!!
如果解决这个问题,在一个事务执行中,可以修改其中的一条数据
同时可以对表的其他数据进行搜索读取