收藏 分销(赏)

ADO NET事务处理.docx

上传人:pc****0 文档编号:8988798 上传时间:2025-03-10 格式:DOCX 页数:4 大小:17.64KB 下载积分:10 金币
下载 相关 举报
ADO NET事务处理.docx_第1页
第1页 / 共4页
ADO NET事务处理.docx_第2页
第2页 / 共4页


点击查看更多>>
资源描述
ADO.NET事务处理 一 事务处理介绍  事务是这样一种机制,它确保多个SQL语句被当作单个工作单  元来处理。事务具有以下的作用:  * 一致性:同时进行的查询和更新彼此不会发生冲突,其他  用户不会看到发生了变化但尚未提交的数据。  * 可恢复性:一旦系统故障,数据库会自动地完全恢复未完  成的事务。  二 事务与一致性  事务是完整性的单位,一个事务的执行是把数据库从一个一  致的状态转换成另一个一致的状态。因此,如果事务孤立执行时  是正确的,但如果多个事务并发交错地执行,就可能相互干扰,  造成数据库状态的不一致。在多用户环境中,数据库必须避免同  时进行的查询和更新发生冲突。这一点是很重要的,如果正在被  处理的数据能够在该处理正在运行时被另一用户的修改所改变,  那么该处理结果是不明确的。  不加控制的并发存取会产生以下几种错误:  1 丢失修改(lost updates)  当多个事务并发修改一个数据时,不加控制会得出错误的结  果,一个修改会覆盖掉另一个修改。  2 读的不可重复性  当多个事务按某种时间顺序存取若干数据时,如果对并发存  取不加控制,也会产生错误。  3 脏读(DIRDY DATA),读的不一致性  4 光标带来的当前值的混乱  事务在执行过程中它在某个表上的当前查找位置是由光标表  示的。光标指向当前正处理的记录。当处理完该条记录后,则指  向下一条记录。在多个事务并发执行时,某一事务的修改可能产  生负作用,使与这些光标有关的事务出错。  5 未释放修改造成连锁退出  一个事务在进行修改操作的过程中可能会发生故障,这时需  要将已做的修改回退(Rollback)。如果在已进行过或已发现错  误尚未复原之前允许其它事务读已做过修改(脏读),则会导致  连锁退出。  6 一事务在对一表更新时,另外的事务却修改或删除此表的  定义。  数据库会为每个事务自动地设置适当级别的锁定。对于前面  讲述的问题:脏读、未释放修改造成的连锁退出、一事务在对一  表更新时另外的事务却修改或删除此表的定义,数据库都会自动  解决。而另外的三个问题则需要在编程过程中人为地定义事务或  加锁来解决。  三 事务和恢复  数据库本身肩负着管理事务的责任。事务是最小的逻辑工作  单元,在这个工作单元中,对数据库的所有更新工作,要么必须  全部成功,要么必须全部失败(回退)。只要应用程序指定了某  段程序为一个事务并做了相应的处理(提交或回退),数据库系  统会自动维护事务本身的特性。  四 ORACLE数据库的事务定义  ORACLE事务从COMMIT、ROLLBACK、连接到数据库或开始第一  条可执行的SQL语句时开始,到一条COMMIT、ROLLBACK语句或退出  数据库时结束。如果在一个事务中包含DDL语句,则在DDL语句的  前后都会隐含地执行COMMIT语句,从而开始或结束一个事务。  如果一个事务由于某些故障或者由于用户改变主意而必须在  提交前取消它,则数据库被恢复到这些语句和过程执行之前的状  态。  利用ROLLBACK语句可以在COMMIT命令前随时撤消或回退一个  事务。可以回退整个事务,也可以会退部分事务,但是不能回退  一个已经被提交的事务。回退部分事务的ROLLBACK命令为:  ROLLBACK to savepoint 存储点名  存储点是用户放入事务中的标记,用来表示一个可被回退的  位置。存储点通过在事务中放入一个SAVEPOINT命令而被插入。该  命令的语法是:  SAVEPOINT 存储点名  如果在ROLLBACK语句中没有给出存储点名,则整个事务被回  退。  五 SYBASE数据库的事务定义  SYBASE通过使用BEGIN TRANsaction和COMMIT TRANsaction命令指  示SQL将任意数目的语句作为一个单元来处理。ROLLBACK TRANsaction  命令则允许用户恢复到事务的开始,或恢复到事务内部已经被用SAVE  TRANsaction命令定义的存储点上。  BEGIN TRANsaction和COMMIT TRANsaction能够包含任意数目的SQL  语句和存储过程,方法很简单:  BEGIN TRANsaction [事务名称]  COMMIT TRANsaction  如果一个事务由于某些故障或者由于用户改变主意而必须在提交  前取消它,则数据库被恢复到这些语句和过程执行之前的状态。  利用ROLLBACK TRANsaction命令可以在COMMIT TRANsaction命令  前随时回退一个事务。可以回退整个事务,也可以回退部分事务,但  是不能回退一个已经被提交的事务。ROLLBACK TRANsaction命令为:  ROLLBACK TRANsaction [事务名|存储点名]  存储点名是用户放入事务中的标记,用来表示一个可以被回退的  位置。存储点名通过在事务中放入一个SAVE TRANsaction命令而被插  入。该命令的句法是:  SAVE TRANsaction 存储点名  如果在ROLLBACK TRANsaction中没有给出存储点名或事务名,则  事务被回退到批处理中的第一个BEGIN TRANsaction语句处。 --------------------------------------------------------------------------------------------------------------------------------- Ado.Net事务处理。 在ADO.NET 中,可以使用Connection 和Transaction 对象来控制事务。若要执行事务,请执行下列操作: • 调用Connection 对象的BeginTransaction 方法来标记事务的开始。 • 将Transaction 对象分配给要执行的Command的Transaction 属性。 • 执行所需的命令。 • 调用Transaction 对象的Commit 方法来完成事务,或调用Rollback 方法来取消事务。 当然ADO.NET事务处理有优点和缺点,运用起来看具体情况了。 • 优点: – 简单性 – 和数据据事务差不多的快 – 独立于数据库,不同数据库的专有代码被隐藏了 • 缺点: – 事务不能跨越多个数据库连接 – 事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接。 下边我们看一个例子,建立一个页面,同样简单,只需要一个按钮,然后编程:  1using System;  2using System.Data;  3using System.Configuration;  4using System.Collections;  5using System.Web;  6using System.Web.Security;  7using System.Web.UI;  8using System.Web.UI.WebControls;  9using System.Web.UI.WebControls.WebParts; 10using System.Web.UI.HtmlControls; 11using System.Data.SqlClient; 12 13namespace WebApplication1 14{ 15    public partial class AdoAction : System.Web.UI.Page 16    { 17        protected void Page_Load(object sender, EventArgs e) 18        { 19 20        } 21 22        protected void btn_Click(object sender, EventArgs e) 23        { 24            SqlConnection con = new SqlConnection(); 25            con.ConnectionString=ConfigurationManager.ConnectionStrings["DSN"].ConnectionString; 26            con.Open(); 27            //启动一个事务。 28            SqlTransaction myTran = con.BeginTransaction(); 29            //为事务创建一个命令,注意我们执行双条命令,第一次执行当然成功。我们再执行一次,失败。 30            //第三次我们改其中一个命令,另一个不改,这时候事务会报错,这就是事务机制。 31            SqlCommand myCom = new SqlCommand(); 32            myCom.Connection = con; 33            myCom.Transaction = myTran; 34            try 35            { 36                myCom.CommandText = "insert into SqlAction values ('测试2','111')"; 37                myCom.ExecuteNonQuery(); 38                myCom.CommandText = "insert into SqlAction values ('测试3','111')"; 39                myCom.ExecuteNonQuery(); 40                myTran.Commit(); 41                Response.Write("成功执行"); 42 43            } 44            catch (Exception Ex) 45            { 46                myTran.Rollback(); 47                //创建并且返回异常的错误信息 48                Response.Write(Ex.ToString()); 49                Response.Write("写入数据库失败"); 50            } 51            finally 52            { 53                con.Close(); 54            } 55  56        } 57 58 59    } 60} 
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服