日期:2014-06-10 浏览次数:20444 次
今天重新看了一遍《asp.net高级程序设计第四版》的第七章,关于asp.net的事务处理这一块,之前看的时候由于工作中也没有用到它所以没怎么在意,不过真是应了那句话:温故而知新呀。
今天的内容不是很多,代码演示也不多,所以可以早早写完休息。
事务:事务可以理解为一种必须同时完成或全部失败的操作。书中的经典例子:账户转账,A账户与B账户之前必须A-100同时B+100,这个操作必须同时成功,只要有个失败两个步骤都需要回滚,这样的一个完整过程就可以称为一个【事务】。
整个小节讲解事务处理可以归纳为以下几点:
语法:BEGIN TRANSACTION
成功:COMMIT
失败:ROLLBACK
下面是一个比较简单的是个例子主要是为了演示一下用法:
CREATE PROCEDURE myTransaction( @amount MONEY,---转账金额 @countA INT,--账户A @countB INT--账户B ) AS BEGIN TRANSACTION ---这里是你自定义的SQL更新语句A /* */ --@@ERROR始终是一个记录当前执行SQL错误信息的变量,每一个更新之后会重新自动置0 IF(@@ERROR>0) ROLLBACK ---这里是你自定义的SQL更新语句B /* */ IF(@@ERROR>0) ROLLBACK ---全部更新已经执行完成 COMMIT --更新事务状态 RETURN
语法:通过调用connection对象的 BeginTransaction()方法开始,该方法返回一个Transaction对象,用于管理事务。由于ADO.NET针对不同的数据库提供程序提供不同的ADO.NET对象,对应的事务对象类名也不一样如:SqlTransaction OledbTransaction OracleTransaction,这里就以SQL Server数据提供程序为例,提供一个标准例子,主要是演示用法:
成功:con.Commit();
失败:con.Rollback();
SqlConnection con=new SqlConnection(strConnect); SqlCommand cmd1 = new SqlCommand(strSQL1,con); SqlCommand cmd2 = new SqlCommand(strSQL2, con); SqlTransaction tran=null; try { con.Open(); tran = con.BeginTransaction(); //创建事务 //将Cmd对象提交到事务中 cmd1.Transaction = tran; cmd2.Transaction = tran; //执行更新 cmd1.ExecuteNonQuery(); cmd2.ExecuteNonQuery(); //全部更新成功,刷新事务状态 tran.Commit(); } catch { //更新失败事务回滚 tran.Rollback(); } finally { con.Close(); }