黑马程序员技术交流社区

标题: ADO.NET中事务怎么写的 [打印本页]

作者: 赵国梁    时间: 2012-2-28 20:33
标题: ADO.NET中事务怎么写的
ADO.NET中事务怎么写的,有没有比较了解的同学,帮一下忙,给我讲解一下。
作者: 成刚    时间: 2012-2-29 11:44
举个事例说明,以张三向李四在银行转账为例:
  1. BEGIN TRANSACTION
  2. DECLARE @errorSum INT
  3. SET @errorSum=0
  4. UPDATE bank SET saveMoney=saveMoney-1000 WHERE customerName='张三'
  5. SET @errorSum=@errorSum+@@ERROR
  6. UPDATE bank SET saveMoney=saveMoney+1000 WHERE customerName='李四'
  7. SET @errorSum=@errorSum+@@ERROR
  8. IF @errorSum<>0
  9.    BEGIN
  10.       PRINT '交易失败,回滚事务'
  11.       ROLLBACK TRANSACTION
  12.    END
  13. ELSE
  14.    BEGIN
  15.       PRINT '交易成功,提交事务'
  16.       COMMIT TRANSACTION
  17.    END
  18. GO
复制代码

作者: 赵国梁    时间: 2012-2-29 12:28
成刚 发表于 2012-2-29 11:44
举个事例说明,以张三向李四在银行转账为例:

你这个是SQL中实物的写法,我问的是ADO.NET中事务的写法!
作者: 成刚    时间: 2012-2-29 12:45
赵国梁 发表于 2012-2-29 12:28
你这个是SQL中实物的写法,我问的是ADO.NET中事务的写法!

不好意思,有点马虎了哈!
  1. SqlConnection conn = new SqlConnection("Data Source=.;uid=sa;passWord=;database = BankSystem");
  2.     conn.Open();
  3.     //启用事务
  4.     SqlTransaction tran = conn.BeginTransaction();
  5.     SqlCommand cmd = new SqlCommand();
  6.     cmd.Connection = conn;
  7.     cmd.Transaction = tran;
  8.     try
  9.     {
  10.             cmd.CommandText = "UPDATE bank SET saveMoney=saveMoney-1000 WHERE customerName='张三'";
  11.            cmd.ExecuteNonQuery();
  12.             cmd.CommandText = "UPDATE bank SET saveMoney=saveMoney+1000 WHERE customerName='李四'";
  13.             cmd.ExecuteNonQuery();
  14.             tran.Commit();
  15.             MessageBox.Show("事务提交成功!");
  16.     }
  17.     catch(Exception ex)
  18.     {
  19.             tran.Rollback();
  20.             MessageBox.Show("事务提交失败!"+ex.Message);
  21.     }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2