今天和朋友在讨论数据库的时候发现一个问题,数据库有四种隔离级别
我在用事务更改一个表的时候,我更改了值但不Commit(),这是别的C#语句是不能操作这个数据库表的,但是可以用SQL语句在来查看这个表的变化,结果表明在用事务是,在Commit()之前,表里面的数据已经更新,但是如果在不执行Commit()语句就关闭或停止调试的话,表里面改变的值就会回滚到原来的值,举个例子说明:
StuName StuAge
aa 11
//读取数据很简单了,就不写了
.....
//更改数据
private void UpdateNoCommit_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Test;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("update Student set StuName='改变' where ID=406333", con);
//tran为一个全局变量
tran = con.BeginTransaction();
cmd.Transaction = tran;
//此时只是执行了语句,并没有把这个事务提交上去
cmd.ExecuteNonQuery()
}
在单击UpdateNoCommit按钮之后,到 数据库里查询一个这个表会发现StuName的值已经改变
private void RollBack_Click(object sender, EventArgs e)
{
tran.RollBack();
}
在执行这个操作以后,StuName的值就会变为aa
当然如果执行tran.Commit()操作 的话,这个值是会提交到数据库的