string sql = "insert into Users(U_Name,U_Pwd,IsDel)values('bbb','123',0)";
conn.Open();
using (SqlTransaction tran = conn.BeginTransaction())
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Transaction = tran;
try
{
cmd.ExecuteNonQuery();
tran.Commit();
Console.WriteLine("添加成功");
Console.Read();
}
catch {
tran.Rollback();
Console.WriteLine("添加失败;");
Console.Read();
}
}
}
问题是我在红色处打个断点,即执行了上一行而不提交事务,这时候数据库里面对应那个表执行select * from Users 就查不出数据了,一直在查,要提交了事务后才能查出来。是不是表被锁住了?这样执行事务的时候是不是会影响其他人使用这张表?
with(nolock)
select * from Users with(nolock) 这样可以查到数据了,非常感谢! 那平时的sql查数据的时候是不是都加上with(nolock)好点呢。
@BZindex: 读到的可能是脏数据额
在执行数据库事务时,必须tran.Commit();才会真正入库。
事务定义了四个事物隔离级别,未提交读、已提交读(默认隔离级别)、可重复读、可序列化。
无论定义什么隔离级别,对数据的更改总是通过排他锁来锁定并直到事务结束时才释放。
可以看看这篇文章:http://www.cnblogs.com/wangjingblogs/archive/2012/02/07/2340930.html
非常感谢!!解决了我的疑惑~