1.事务在是依附在连接上的.
如果SqlCommand依附的连接上有事务,那么对必须给SqlCommand指定事务.不然出现异常:
异常详细信息: System.InvalidOperationException: 如果分配给命令的连接位于本地挂起事务中,ExecuteNonQuery 要求命令拥有事务。命令的 Transaction 属性尚未初始化。
代码:
string connString = "Data Source=192.168.0.211;Initial Catalog=test1;User ID=dev_user;Password=dev_user";
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlTransaction transaction = conn.BeginTransaction(IsolationLevel.Serializable);
SqlCommand sqlcomm = new SqlCommand();
sqlcomm.Connection = conn;
//sqlcomm.Transaction = transaction;
sqlcomm.CommandText = "insert into yg(yg_name,b_id) values('b',1)";
sqlcomm.ExecuteNonQuery();
transaction.Rollback();
conn.Close();
2.事务的Rollback()操作其实是使用了与sql相反的操作,如insert的Rollback为delete.
意思就是在Rollback之前,sql已真实地去数据库进行了操作.
3.事务是引用类型,其它过程对其的操作会影响它.
protected void Button1_Click(object sender, EventArgs e)
{
string connString = "Data Source=192.168.0.211;Initial Catalog=test1;User ID=dev_user;Password=dev_user";
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlTransaction transaction = conn.BeginTransaction(IsolationLevel.Serializable);
SqlCommand sqlcomm = new SqlCommand();
sqlcomm.Connection = conn;
sqlcomm.Transaction = transaction;
sqlcomm.CommandText = "insert into yg(yg_name,b_id) values('c',1)";
sqlcomm.ExecuteNonQuery();
//transaction.Rollback();
myrollback(transaction);//事务是引用类型,其它过程对其的操作会影响它.
conn.Close();
Label1.Text = "ok";
}
void myrollback(SqlTransaction transaction)
{
transaction.Rollback();//insert无效
}
作者:ikmb@163.com
本文介绍了在.NET Framework下使用SqlCommand进行数据库操作时如何正确处理事务,包括事务的开始、提交和回滚等操作,并通过示例代码说明了在事务中SqlCommand必须指定事务属性,以及事务回滚的具体含义。

1936

被折叠的 条评论
为什么被折叠?



