ADO NET事务处理.docx_第1页
ADO NET事务处理.docx_第2页
ADO NET事务处理.docx_第3页
ADO NET事务处理.docx_第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命令则允许用户恢复到事务的开始,或恢复到事务内部已经被用SAVETRANsaction命令定义的存储点上。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事务处理有优点和缺点,运用起来看具体情况了。 优点: 简单性 和数据据事务差不多的快 独立于数据库,不同数据库的专有代码被隐藏了 缺点: 事务不能跨越多个数据库连接 事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接。下边我们看一个例子,建立一个页面,同样简单,只需要一个按钮,然后编程:1usingSystem;2usingSystem.Data;3usingSystem.Configuration;4usingSystem.Collections;5usingSystem.Web;6usingSystem.Web.Security;7usingSystem.Web.UI;8usingSystem.Web.UI.WebControls;9usingSystem.Web.UI.WebControls.WebParts;10usingSystem.Web.UI.HtmlControls;11usingSystem.Data.SqlClient;1213namespaceWebApplication11415publicpartialclassAdoAction : System.Web.UI.Page1617protectedvoidPage_Load(objectsender, EventArgs e)1819202122protectedvoidbtn_Click(objectsender, EventArgs e)2324SqlConnection con=newSqlConnection();25con.ConnectionString=ConfigurationManager.ConnectionStringsDSN.ConnectionString;26con.Open();27/启动一个事务。28SqlTransaction myTran=con.BeginTransaction();29/为事务创建一个命令,注意我们执行双条命令,第一次执行当然成功。我们再执行一次,失败。30/第三次我们改其中一个命令,另一个不改,这时候事务会报错,这就是事务机制。31SqlCommand myCom=newSqlCommand();32myCom.Connection=con;33myCom.Transaction=myTran;34try3536myCom.CommandText=insert into SqlAction values (测试2,111);37myCom.ExecuteNonQuery();38myCom.CommandText=insert into SqlAction values (测试3,111);39myCom.ExecuteNonQuery();40myTran.Commit();41

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论