首页新闻找找看学习计划

C#中执行事务的问题

0
悬赏园豆:20 [已解决问题] 解决于 2016-03-25 13:57

 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 就查不出数据了,一直在查,要提交了事务后才能查出来。是不是表被锁住了?这样执行事务的时候是不是会影响其他人使用这张表?

wxl369的主页 wxl369 | 初学一级 | 园豆:193
提问于:2016-03-25 12:40
< >
分享
最佳答案
0

with(nolock)

收获园豆:15
jello chen | 大侠五级 |园豆:7096 | 2016-03-25 13:02

select * from Users  with(nolock)  这样可以查到数据了,非常感谢! 那平时的sql查数据的时候是不是都加上with(nolock)好点呢。

wxl369 | 园豆:193 (初学一级) | 2016-03-25 13:45

@BZindex: 读到的可能是脏数据额

jello chen | 园豆:7096 (大侠五级) | 2016-03-25 14:33
其他回答(1)
0

在执行数据库事务时,必须tran.Commit();才会真正入库。

事务定义了四个事物隔离级别,未提交读、已提交读(默认隔离级别)、可重复读、可序列化。

无论定义什么隔离级别,对数据的更改总是通过排他锁来锁定并直到事务结束时才释放。

可以看看这篇文章:http://www.cnblogs.com/wangjingblogs/archive/2012/02/07/2340930.html

收获园豆:5
陀螺- | 园豆:74 (初学一级) | 2016-03-25 13:09

非常感谢!!解决了我的疑惑~

支持(0) 反对(0) wxl369 | 园豆:193 (初学一级) | 2016-03-25 13:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册