敖士伟 事务 体会一

本文介绍在使用SqlCommand进行数据库操作时,如何正确处理事务。如果SqlCommand所连接的数据库存在未完成的事务,则必须为SqlCommand指定相应的事务,否则将引发异常。此外,文章还解释了事务的Rollback操作以及如何在其他过程中引用并操作事务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果SqlCommand依附的连接上有事务,那么对必须给SqlCommand指定事务.不然出现异常:
异常详细信息: System.InvalidOperationException: 如果分配给命令的连接位于本地挂起事务中,ExecuteNonQuery 要求命令拥有事务。命令的 Transaction 属性尚未初始化。
代码:
  1.     string connString = "Data Source=192.168.0.x;Initial Catalog=test1;User ID=dev_user;Password=dev_user";
  2.             SqlConnection conn = new SqlConnection(connString);
  3.             conn.Open();
  4.             SqlTransaction transaction = conn.BeginTransaction(IsolationLevel.Serializable);
  5.             SqlCommand sqlcomm = new SqlCommand();
  6.             sqlcomm.Connection = conn;
  7.             //sqlcomm.Transaction = transaction;
  8.             sqlcomm.CommandText = "insert into yg(yg_name,b_id) values('b',1)";
  9.             sqlcomm.ExecuteNonQuery();
  10.             transaction.Rollback();
  11.             conn.Close();
2.事务的Rollback()操作其实是使用了与sql相反的操作,如insert的Rollback为delete.
意思就是在Rollback之前,sql已真实地去数据库进行了操作.

3.事务是引用类型,其它过程对其的操作会影响它.

  1. protected void Button1_Click(object sender, EventArgs e)
  2.         {
  3.             string connString = "Data Source=192.168.0.211;Initial Catalog=test1;User ID=dev_user;Password=dev_user";
  4.             SqlConnection conn = new SqlConnection(connString);
  5.             conn.Open();
  6.             SqlTransaction transaction = conn.BeginTransaction(IsolationLevel.Serializable);
  7.             SqlCommand sqlcomm = new SqlCommand();
  8.             sqlcomm.Connection = conn;
  9.             sqlcomm.Transaction = transaction;
  10.             sqlcomm.CommandText = "insert into yg(yg_name,b_id) values('c',1)";
  11.             sqlcomm.ExecuteNonQuery();
  12.             //transaction.Rollback();
  13.             myrollback(transaction);//事务是引用类型,其它过程对其的操作会影响它.
  14.             conn.Close();
  15.             Label1.Text = "ok";
  16.         }
  17.         void myrollback(SqlTransaction transaction)
  18.         {
  19.             transaction.Rollback();//insert无效
  20.         }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值