事务处理

在编程中,经常需要使用事务。所谓事务,就是一系列必须都成功的操作,只要有一步操作失败,所有其他的步骤也必须撤销。比如用ASP开发一个网络硬盘系统,其用户注册部分要做的事有:
将用户信息记入数据库
为用户开个文件夹用于存储
初始化用户操作日志
这三步必须使用事务,否则万一磁盘操作失败,而没有撤销数据库操作,就会造成只能登陆而不能操作的“死用户”现象。
由于数据库系统特殊的发展历史,小至Access,大到DB2,无不带有事务支持。因此上述步骤可以如下表示:
On Error Resume Next
第一步:
在事务环境下把用户信息记入数据库
If Err Then
关闭连接
退出
Else
第二步:创建文件夹
If Err Then
回滚第一步数据库操作,退出
Else
第三步:在事务环境下操作日志数据库
If Err Then
回滚第一步操作,删除第二步建立的文件夹
退出
End If
End If
End If
提交第一步数据库操作的事务
提交第二步数据库操作的事务
End
每一步都需要进行判断,如果失败,还需要手工回滚前面多步操作,使程序变得复杂、难懂。如果今后更新了程序,增加其他步骤,还需要嵌套更多层的If...Else...End If,使程序流程更加复杂。
正确的解决办法是使用ASP的事务控制功能。IIS通过和MTS服务联系,可以控制多种支持事务的系统,当程序发出“失败”的信号时,所有支持事务的系统均将自动回滚,即使操作已经正式完成;对不支持事务的操作也提供了方便的手工回滚方式。上面的例子用ASP事务控制功能重写如下:
<%@ TRANSACTION = Required %>
On Error Resume Next
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open ....
Conn.Execute "INSERT...."
Conn.Close
Set Conn=Nothing
Set Conn2=Server.CreateObject("ADODB.Connection")
Conn2.Open ....
Conn2.Execute "INSERT...."
Conn2.Close
Set Conn2=Nothing
Set FSO=Server.CreateObject("Scripting.FilesystemObject")
FSO.CreateFolder "...."
If Err Then
ObjectContext.SetAbort '通知所有支持事务的组件回滚,并运行手工回滚代码

时间: 2024-08-02 18:57:54

事务处理的相关文章

SQL和Oracle对数据库事务处理的差异性

在吉日嘎拉的软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)文章中关于MS SQL Server和Oracle对数据库事务处理的差异性引起一些争论,因此记录我对数据库事务处理的想法. 简介 本文讲述MS SQL Server和Oracle对数据库事务处理的差异性,以及Oracle如何对事务处理的实现. 什么是事务 数据库事务(Database Transaction)是一组数据库操作的处理单元.事务符合ACID的特性: Atomic:原子性,要么全部要么一无所有.All or None.

Sqlserver2000中的事务处理

server|sqlserver|事务处理 Sqlserver2000中的事务处理 一.       定义及其性质:事务:事务是作为单个逻辑工作单元执行的一系列操作.属性:一个逻辑工作单元必须有四个属性,称为 ACID(原子性.一致性.隔离性和持久性)属性,只有这样才能成为一个事务:1.      原子性:事务必须是原子工作单元:对于其数据修改,要么全都执行,要么全都不执行.2.      一致性:事务在完成时,必须使所有的数据都保持一致状态.在相关数据库中,所有规则都必须应用于事务的修改,以保

asp事务处理的另外一个方法

事务处理|事务处理   <%'asp事务处理.'测试数据库为sql server,服务器为本机,数据库名为test,表名为a,两个字段id(int)主键标识,num(int)set conn=server.CreateObject("adodb.connection") strConn="provider=sqloledb.1;persist security info=false;uid=sa;pwd=sa;Initial Catalog=test;Data Sour

利用ASP实现事务处理的方法

事务处理|事务处理 在开发Web应用时,无一例外地需要访问数据库,以完成对数据的查询.插入.更新.删除等操作.受应用逻辑的影响,有时需要将多条数据库操作指令组成一个工作单元(事务).在数据库中,所谓事务是指一组逻辑操作单元,它使数据从一种状态变换到另一种状态.为确保数据库中数据的一致性,应当用离散的成组的逻辑单元操作数据:当它全部完成时,数据的一致性可以保持:而当单元中的一部分操作失败时,整个事务会被全部忽略,所有从起始点以后的操作全部退回到开始状态. 实际上,在默认方式下对数据库的每一次操作都

ASP中对数据库表的操作,可使用事务处理,并支持多事务处理

事务处理|数据|数据库 在ASP的数据库对象链接对象中,提供了一下属性: BeginTrans 事务开始 CommitTrans 事务提交 RollbackTrans 事务回滚 <% On Error Resume Next '错误发生后继续处理 'Asp中使用事务 Set conn=Server.CreateObject("ADODB.Connection") conn.Open "course_dsn","course_user",&q

Oracle 9i 事务处理

   事务是Oracle 9i中进行数据库操作的基本单位,在PL/SQL程序中,可以使用3个事务处理控制命令. commit命令     commit是事务提交命令.在Oracle 9i数据库中,为了保证数据的一致性,在内存中将为每个客户机建立工作区,客户机对数据库进行操作处理的事务都在工作区内完成,只有在输入commit命令后,工作区内的修改内容才写入到数据库上,称为物理写入,这样可以保证在任意的客户机没有物理提交修改以前,别的客户机读取的后台数据库中的数据是完整的.一致的,如图9.26所示.

MYSQL高级特性 -- 事务处理

下面以两个银行账户之间的转账为例子进行演示. 要使用MySQL中的事务处理,首先需要创建使用事务表类型(如BDB = Berkeley DB或InnoDB)的表. CREATE TABLE account ( account_id BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, balance DOUBLE ) TYPE = InnoDB; 要在事务表上使用事务处理,必须要首先关闭自动提交: SET AUTOCOMMIT = 0; 事务处

Java中数据库事务处理的实现

事务处理|数据|数据库 摘要 本文介绍在Java中进行事务处理的方法,通过实例分别讲述了如何采用JavaBean.Ejb组件实现J2EE应用服务器支持的JDBC事务.JTA(Java Transaction API)事务. 关键词 JavaBean,EJB, 数据库,事务处理,JTA JavaBean JavaBean是用Java语言编写的与平台无关的组件.它是描述Java的软件组件模型,有点类似于Microsoft的COM组件的概念.在Java模型中,通过JavaBean可以无限扩充Java程

通过ADO.NET实现事务处理

ado|事务处理 在数据库连接上创建事务处理对象,然后调用事务处理对象来提交事务或回滚事务.简单的代码: private void button1_Click(object sender, System.EventArgs e)  {   SqlConnection conn = new SqlConnection("Data Source=192.168.2.200;uid=sa; password=;database = HaierHR");   conn.Open();   //

SQL读书笔记-事务处理

笔记|事务处理 理解sql事故处理1 在sql事务处理期间,由语句所完成的工作,在永久写入数据库之前都可以取消(使用rollback语句).commit告诉dbms使数据库的变化成为永久的. 下面就来理解一下事务处理过程如:begin transaction语句1语句2语句3语句4在应用程序正常结束之前,4条修改语句并未提交,即未成为永久的,由此,异常结束将使得dbms取消由应用程序体中的所有4条sql语句所做的修改. 如果想让前两条修改后永久保存到数据库中,而不管后两条是否成功.可以执行如下事