定义和用法这三个方法与 Connection 对象使用,来保存或取消对数据源所做的更改。 注释:并非所有提供者都支持事务。 注释:BeginTrans、CommitTrans 和 RollbackTrans 方法在客户端 Connection 对象上无效。 那客户端不能支持事务? 这是什么意思?BeginTransBeginTrans 方法可开始一个新事务。 CommitTransCommitTrans 方法可保存自最后一个 BeginTrans 方法调用以来的所有更改,并结束当前事务。它也可能启动新事务。 RollbackTransRollbackTrans 方法可取消自最后一次 BeginTrans 方法调用以来的所有更改,并结束该事务。它也可能启动新事务。 说明对于支持嵌套事务的提供者,在打开的事务中调用 BeginTrans 方法将启动新的嵌套事务。返回值将指示嵌套层次:返回值为“1”指示打开了顶层事务(即此事务未嵌套在其他事务中),返回值为“2”指示打开了第二层事务(嵌套在顶层事务中的事务),依此类推。调用 CommitTrans 或 RollbackTrans 只影响最新打开的事务;在处理任何更高层事务之前必须关闭或回卷当前事务。 语法level=objconn.BeginTrans()
objconn.BeginTrans
objconn.CommitTrans
objconn.RollbackTrans
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> </head> <body> 务回滚将用户指定的事务回滚到事务内上一个保存点或事务的起始 列1----------------------------------------------------------------- <%'启动一个事务操作 %> <% id=request("id") cont=request("cont") ps="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("test.mdb") Set Conn=Server.CreateObject("ADODB.CONNECTION") conn.open ps%> <% Conn.BeginTrans %> <% sqlText="Insert into b1(id2) values("&id&")" %> <% conn.execute(sqlText) %> <% if conn.Errors.Count>0 then %> <% conn.Errors.Clear %> <%'如果插入数据操作失败,则事务向前回滚 %> <% conn.RollBackTrans %> <% response.write "RegisterFail.html" %> <% end if %> <% sqlText="Insert into b2(id,content) values("&id&",'"&cont&"')" %> <%//执行事务单元中的第二条插入语句 conn.execute(sqlText) %> <% if conn.Errors.Count>0 then %> <% conn.Errors.Clear %> <%'//如果操作失败,则事务向前回滚 conn.RollBackTrans %> <% response.write "RegisterFail.html" %> <% end if %> <%'如果整个事务操作执行正确,则提交事务 Conn.CommitTrans %> <%'转向注册成功处理提示 response.write "RegisterOk.html" %> 列2---------------------------------------------------------- <% '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 Source=." conn.Open strConn '以上代码建立数据库连接 conn.BeginTrans '事务开始 strSql1="update a set num=1000 where id=24" '第一个sql语句为update。(语法正确) strSql2="insert into a(num) values('a')" '第二个sql语句为错误的sql语句 strSql3="insert into a(num) values(33333)" '第三个sql语句为正确的sql语句 call conn.execute(strSql1) call conn.execute(strSql2) call conn.execute(strSql3) if conn.Errors.Count=0 then conn.CommitTrans '如果没有conn错误,则执行事务提交 else conn.RollbackTrans '否则回滚 end if %> 以上代码经调试,可以正常的进行事务处理。但是有时候,我们并不想将编译错误显示给用户。 则我们需要在conn.BeginTrans后面加上On error resume next 但是因为用到了On error resume next。conn.Errors.Count 只能获得最后一个数据库操作的conn返回的结果 。上面的三个sql语句,因为最后一个sql语句是正确的,则此事务处理就无效了。那我们需要对出错处理作出相对应的修改。 if conn.Errors.Count=0 then应该改为if err.number=0 then 这样,我们可以在数据库回滚后同时做出其他相对应的操作或者提示。修改后的代码如下: <% set conn=server.CreateObject("adodb.connection") strConn="provider=sqloledb.1;persist security info=false;uid=sa;pwd=sa;Initial Catalog=test;Data Source=." conn.Open strConn '以上代码建立数据库连接 conn.BeginTrans '事务开始 on error resume next '增加的代码 strSql1="update a set num=1000 where id=24" '第一个sql语句为update。(语法正确) strSql2="insert into a(num) values('a')" '第二个sql语句为错误的sql语句 strSql3="insert into a(num) values(33333)" '第三个sql语句为正确的sql语句 call conn.execute(strSql1) call conn.execute(strSql2) call conn.execute(strSql3) if err.number =0 then conn.CommitTrans '如果没有conn错误,则执行事务提交 else conn.RollbackTrans '否则回滚 '回滚后的其他操作 strerr=err.Deion Response.Write "数据库错误!错误日志:<font color=red>"&strerr &"</font>" Response.End end if %> </body> </html>
|