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

事务处理|事务处理

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

实际上,在默认方式下对数据库的每一次操作都是隐含的事务处理。本文以一个典型的用户注册程序为例,介绍三种利用ASP实现事务处理的方法:基于ASP数据库组件的解决方法、基于数据库内部的事务处理机制的解决方法和基于MTS组件的解决方法。

程序功能
在SQL Server数据库中建立两个表:USER表和USERDOC表。其中USER表中存放的是注册用户的用户名和密码,USERDOC表中存放的是该注册用户的个人资料,并且以用户名为索引。下面是表USER和USERDOC的定义:
Create Table USER(userName varchar(30),userPasswd varchar(30))
Create Table USERDOC(userName varchar(30),Age int,Sex int,PhoneNumber varchar(20),Address varchar(50))

当用户请求注册时,ASP脚本先将用户名和密码插入到USER表中,然后在USERDOC表中插入用户个人信息(年龄、性别、联系电话和家庭住址等)。同时,应用程序还必须保证USER表中的每一条记录在USERDOC表中都有相应的记录。

方法一
利用ASP内置ADO组件中的Connection对象可以实现对数据库操作的事务性处理。Connection对象的部分方法如下:
●Connection.BeginTrans方法:启动一个事务;
●Connection.CommitTrans方法:完成/提交一个事务;
●Connection.RollBackTrans方法:撤消/放弃一个事务。
//启动一个事务操作
<% Conn.BeginTrans %>
<% sqlText="Insert into USER(userName,userPasswd) values('" %>
<% sqlText=sqlText & request("usrName") & "','"&request("usrPasswd")&"') " %>
<% conn.execute(sqlText) %>
<% if conn.Errors.Count>0 then %>
<% conn.Errors.Clear %>
//如果插入数据操作失败,则事务向前回滚
<% conn.RollBackTrans %>
<% response.Redirct RegisterFail.html %>
<% end if %>
<% sqlText="Insert into USERDOC(userName,Age,Sex,PhoneNumber,Address) "%>
<% sqlText=sqlText & "values('"& request ("usrName") & "', " & request("Age") %>
<% sqlText=sqlText & ",'" & request ("PhoneNum") & "','" %>
<% sqlText=sqlText & request("Address") & "') " %>
//执行事务单元中的第二条插入语句
<% conn.execute(sqlText) %>
<% if conn.Errors.Count>0 then %>
<% conn.Errors.Clear %>
//如果操作失败,则事务向前回滚
<% conn.RollBackTrans %>
<% response.Redirct RegisterFail.html %>
<% end if %>
//如果整个事务操作执行正确,则提交事务
<% Conn.CommitTrans %>
//转向注册成功处理页面
<% response.Redirct RegisterOk.html %>

方法二
可以利用数据库系统内部的事务处理机制,通过在数据库服务器中编写包含事务的存储过程,完成对数据操作的事务处理。同时,利用ADO组件调用存储过程,还可以根据存储过程的返回代码判断事务处理是否执行成功。

在数据库系统中,每一条SQL语句都是一个事务。因此可以保证每条语句要么完成,要么退回到开始之处。但是如果希望一组SQL语句的操作要么全部完成,要么全部无效,就需要利用数据库的事务处理机制来实现。

在数据库中生成存储过程的主要代码如下:
Create proc RegisterUser (@usrName varchar(30), @usrPasswd varchar(30),@age int, @PhoneNum varchar(20), @Address varchar(50) ) as begin
//显示定义并开始一个事务
begin tran
insert into USER(userName,userPasswd) values(@usrName,@usrPasswd)
if @@error<>0
begin
//操作失败,则事务回滚
rollback tran
//返回存储过程,并设置返回码为事务操作失败
return -1
end
insert into USERDOC(userName,age,sex,PhoneNumber,Address)
values(@Usrname,@age,@PhoneNum,@Address)
if @@error<>0
begin
//操作失败,则事务回滚
rollback tran
return -1
end
//如果操作执行正确,则提交事务
commit tran
return 0
end
在ASP脚本中调用数据库存储过程的主要代码如下:
<% Set Comm=server.CreateObject
("ADODB.Command") %>
<% Set Comm.ActiveConnection=conn %>
<% Comm.CommandType=adCmdStoredProc %>
<% Comm.CommandText="RegisterUser" %>
//创建存储过程返回参数对象
<% Set RetCode=Comm.CreateParameter
("RetCode",adInteger,adParamReturnValue) %>
//创建存储过程输入参数对象
<% Set usrName=Comm.CreateParameter ("usrName",adVarchar,adParamInput,30) %>
<% Set usrPwd=Comm.CreateParameter
("usrPasswd",adVarchar,adParamInput,30) %>
<% Set age=Comm.CreateParameter("age",adInteger,adParamInput) %>
<% Set PhoneNum=Comm.CreateParameter
("PhoneNum",adVarchar,adParamInput, 20) %>
<% Set Address=Comm.CreateParameter("Address",adVarchar,adParamInput,50) %>
<% Comm.Parameters.Append usrName %>
<% Comm.Parameters.Append usrPwd %>
<% Comm.Parameters.Append age %>
<% Comm.Parameters.Append PhoneNum %>
<% Comm.Parameters.Append Address %>
<% Comm.Parameters("usrName")=request("usrName") %>
<% Comm.Parameters("usrPasswd")=request("usrPasswd") %>
<% Comm.Parameters("age")=request("age") %>

时间: 2024-08-08 14:12:18

利用ASP实现事务处理的方法的相关文章

利用ASP实现事务处理的方法_应用技巧

 利用ASP实现事务处理的方法     选择自 AppleBBS 的 Blog   关键字   利用ASP实现事务处理的方法  出处      在开发Web应用时,无一例外地需要访问数据库,以完成对数据的查询.插入.更新.删除等操作.受应用逻辑的影响,有时需要将多条数据库操作指令组成一个工作单元(事务).在数据库中,所谓事务是指一组逻辑操作单元,它使数据从一种状态变换到另一种状态.为确保数据库中数据的一致性,应当用离散的成组的逻辑单元操作数据:当它全部完成时,数据的一致性可以保持:而当单元中的一

利用ASP制作EXECL报表方法(一)

很多时候我们需要把表格形式的数据转换成EXECL的形式呈现在用户面前,其中有好几个方法可以做到一点,我将介绍一种利用ASP完成的方法,该方法允许服务器动态地创建EXECL报表而且不用占用任何服务器空间.该方法还允许多个用户同时收到该数据.但是该方法至少需要EXECL 97的支持.废话少说,要完成这个工作最重要的是要告诉浏览器HTTP头,就用如下代码: <% Response.ContentType = "application/vnd.ms-excel"%> 下面来看一个例

利用ASP制作EXECL报表方法

很多时候我们需要把表格形式的数据转换成EXECL的形式呈现在用户面前,其中有好几个方法可以做到一点,我将介绍一种利用ASP完成的方法,该方法允许服务器动态地创建EXECL报表而且不用占用任何服务器空间.该方法还允许多个用户同时收到该数据.但是该方法至少需要EXECL 97的支持.废话少说,要完成这个工作最重要的是要告诉浏览器HTTP头,就用如下代码: <% Response.ContentType = "application/vnd.ms-excel" %> 下面来看一个

利用ASP制作EXECL报表方法(二)

废话少说,请看代码:runquery.asp <%@ LANGUAGE="VBSCRIPT" %><%'DSNless connection to Access DatabasestrDSNPath = "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("testDB.mdb")%><!--#in

jquery.Ajax()方法调用Asp.Net后台的方法解析

 本篇文章主要是对jquery.Ajax()方法调用Asp.Net后台的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法. 先来个简单的实例热热身吧.   1.无参数的方法调用 asp.net code:    代码如下: using System.Web.Script.Services;      [WebMethod]    public static string SayHello()    {   

ASP:利用ASP把图片上传到数据库

ASP(Active Server Pages)是Microsoft很早就推出的一种WEB应用程序解决方案,也是绝大多数从事网站开发人员很熟悉的一个比较简单的编程环境.通过ASP我们可以创建功能强大的动态的WEB应用程序.ASP虽然功能很强大,但有些功能用纯ASP代码完成不了,为了能保证开发出功能更加强大的WEB应用程序,我们可以借助调用COM组件. 在日常工作中,例如开发一个"商品网上销售系统"吧,为了使顾客对商品的外观有所了解,也就是顾客在看商品的文字介绍的同时在文字的旁边有该商品

利用ASP技术实现文件直接上传功能

上传|上传 摘要: 本文首先比较了几种常见的文件上传技术,然后通过实例介绍了利用ASP技术直接实现文件上传的具体方法. 关键词:ASP:文件上传:二进制数据 引言 采用WEB技术实现B/S(浏览器/服务器)结构的管理系统是办公自动化的发展趋势.基于WEB技术的管理系统,由于开发周期短:与用户平台无关:易于实现交互式应用:能对信息进行快速.高效的收集.处理和发布,近几年来得到了迅速发展.而ASP技术由于其开发效率高.交互性好,安全性强等特点,逐渐成为开发管理系统的首选工具. 许多基于WEB的应用都

利用ASP存取各种常用类型数据库

数据|数据库 摘要: 本文讨论利用ASP存取DBF.DBC.MDB.Excel.SQL Server型数据的方法及函数实现,最后给出一个利用本文提供的函数存取Excel型数据库的例子,对企事业数据重用及共享具有很强的实际意义. 关键词: ASP数据库存取 DBF DBC MDB Excel SQL Server 前言 在Internet/Intranet网页上随处可见留言板.讨论组.网上投票.网上调查.聊天室等Internet功能模块,这些程序都是利用ASP(Active Server Page

利用ASP+XML打造个性化留言本

asp+|xml 一.读者指引 读者指引帮助你掌握本文的梗概.以免你看了大半才明白这编文章不适合你,给你造成视觉污染. 如果你正在用ASP+XML写一些程序,或者你正在学XML那就值得一看. 阅读本文须具备的知识,对ASP有基本的了解,对XML和DOM有基本了解,如果你不了解那么你通过学习本文基本上能够撑握ASP+XML和DOM的应用,并能根据本文范写出自已更高级的ASP+XML程序. 二.基本思想 本文思想是基于用ASP和DOM来读取和存储XML数据,并利用XML数据来存储留言信息,达到同用数