Asp教程

通过asp实例结合结合ACCESS,MSSQL来更好的深入Asp学习 - 爬坡者

« Asp类初体验收集常用正则表达式 »

asp事务处理

当大量的对数据库进行插入,修改,删除等操作时,如果要实现事务,可以用以下代码。如:
<%@ TRANSACTION = Required%>
On Error Resume Next
strSql1="insert into a(num) values(1)"
strSql2="insert into a(num) values('a')"
'执行第一个sql语句
'执行第二个sql语句
'如果不用到事务,则第一个sql语句会提交到数据库中。
'另外经查看数据库发现,数据库的事务回滚其实是执行相对应的反操作。执行insert,则在回滚里会执行delete操作。可以通过观看主键id的变化得到。
If Err Then
      ObjectContext.SetAbort '通知所有支持事务的组件回滚
Else
      ObjectContext.SetComplete
End If
Sub OnTransactionAbort
      Response.Write "错误"
     '注意如果在前面用到了一些非数据库方面的操作,如文件操作,建立文件,删除文件等。需要在此加上文件的回滚操作。前面建立文件,则在此需要相应的删除文件。
End Sub
Sub OnTransactionCommit
     Response.Write "成功"
End Sub

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 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.Description
    Response.Write "数据库错误!错误日志:<font color=red>"&strerr &"</font>"
    Response.End 
end if
%>

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Spirit Build 80710

Copyright 2007-2008 papozhe.com [asp教程] All Rights Reserved.
浙ICP备07030537号
免责申明:所有文章除特别声明,均来自网上,主要为学习用!内容仅供参考,版权归原作者。如侵犯您利益,请来信告知.
Email:papozhe$Gmail.com QQ:76336503