原创 ASP事务处理 for access-zt 最后一段为准确的

2015-8-2 07:00 1109 25 26 分类: 工程师职场 文集: asp

所谓事务处理,简单地说,就是所有的数据库操作都可以看做事务处理。当开始一个事务处理后,就打开Web页面与数据库的事务处理通道,此时可以从Web页面上直接更新数据库内容,但是更新结果并不马上真正反映到数据库中。只有在提交事务处理结果后,数据库内容才能被真正更新,否则,所有的操作都无效。

用法举例(db1.mdb中有一个test表,只包含一个name文本字段):

<%
Dim conn,sqlstr,sqlstr2,sqlstr3
Set conn=server.createobject("ADODB.connection")
Conn.connectionstring="provider=microsoft.jet.oledb.4.0; data source=" & server.mappath("db1.mdb")
Conn.open
sqlstr="insert into test(name) values('aaa')"   '正确的SQL语句
sqlstr2="insert into test(name2) values('bbb')"   '错误的SQL语句
sqlstr3="insert into test(name) values('ccc')"   '正确的SQL语句
Conn.BeginTrans
conn.execute(sqlstr)
conn.execute(sqlstr2)
conn.execute(sqlstr3)
If conn.Errors.Count=0 then
     Conn.CommitTrans
     Response.write ""
Else
     Conn.RollbackTrans
     Response.write ""
End if
Conn.close
Set conn=nothing
%>

这样当执行到错误的SQL语句时程序抛出错误信息,不再理会后面第三条SQL语句正确与否,事务处理机制生效,整个提交过程无效。实现运用中我们并不希望将错误信息展示在用户面前,于是我们加了On error resume next语句,如下:

<%
Dim conn,sqlstr,sqlstr2,sqlstr3
Set conn=server.createobject("ADODB.connection")
Conn.connectionstring="provider=microsoft.jet.oledb.4.0; data source=" & server.mappath("db1.mdb")
Conn.open
sqlstr="insert into test(name) values('aaa')"
sqlstr2="insert into test(name2) values('bbb')"
sqlstr3="insert into test(name) values('ccc')"
On error resume next
Conn.BeginTrans
conn.execute(sqlstr)
conn.execute(sqlstr2)
conn.execute(sqlstr3)
If conn.Errors.Count =0 then
     Conn.CommitTrans
     Response.write ""
Else
     Conn.RollbackTrans
     Response.write ""
End if
On Error GoTo 0
Conn.close
Set conn=nothing
%>

这样出现的问题是只要最后一条SQL语句是正确的,那么conn.Errors.Count的值就必定为0,这样的结果是先前错误的SQL语句不会执行,正确的SQL语句会被正确执行,整个事务处理机制基本上等于失效,解决的办法是将conn.Errors.Count改为err.number,代码如下:

<%
Dim conn,sqlstr,sqlstr2,sqlstr3
Set conn=server.createobject("ADODB.connection")
Conn.connectionstring="provider=microsoft.jet.oledb.4.0; data source=" & server.mappath("db1.mdb")
Conn.open
sqlstr="insert into test(name) values('aaa')"
sqlstr2="insert into test(name2) values('bbb')"
sqlstr3="insert into test(name) values('ccc')"
On error resume next
Conn.BeginTrans
conn.execute(sqlstr)
conn.execute(sqlstr2)
conn.execute(sqlstr3)
If err.number = 0 then
     Conn.CommitTrans
     Response.write ""
Else
     Conn.RollbackTrans
     Response.write ""
End if
On Error GoTo 0
Conn.close
Set conn=nothing
%>

文章评论1条评论)

登录后参与讨论

用户377235 2015-10-25 21:04

This does look prisoming. I'll keep coming back for more.
相关推荐阅读
用户1618393 2015-08-26 17:18
用三极管,发光二极管,电阻,电容做一个震荡电路
R2和C1构成RC谐振网络,利用对电容C1的充放电来形成电容与三极管基极结合点电压的高低变化,而三极管Q1在此是一个反相器,随着电容的充放电从而会造成三极管集电极的电平高低变化,于是在电压加上后就...
用户1618393 2015-08-26 13:05
电容知识汇总
假如有人问你电容在中国以及全世界有哪些厂家,你能过顺利的答出了吗?如果你看了下面的这张图的话,你自然而然对全世界有关于电容的厂家有了一个清晰的认识,而今天我们就从这张图之中某个厂家的电容开始说起。...
用户1618393 2015-08-26 13:00
二极管知识汇总
我依稀记得前不久分享过一篇LDO的电路的文章,文章如下;   里面的LDO的电路如下; 而在这当中我们用红色的部分高亮的显示出来,在这里我们所要做的就是来讲解这当...
用户1618393 2015-08-22 07:53
三极管震荡电路
    对于模拟电路来说,振荡的必要条件是(1)振幅平衡(2)相位平衡  (此电路调试成功)        准备知识:电容两端电压不允许突变(电容的数学模型是电压的积...
用户1618393 2015-08-12 21:40
咪头的参数包括哪些
随着通讯业的蓬勃发展,和相关技术的提高,整机产品对传声器的要求也越来越高。本文所提到的传声器,是指驻极体电容传声器,即俗称的咪头。传声器的通用指标:   1、  灵敏度(感度)  一般定义为:传声...
用户1618393 2015-08-03 17:01
ASP 解析 JSON 例子
JSON( Object Notation) 我想这个名字大家已经不陌生了,它是一种轻量级的数据交换格式 , 是由服务直接生成语句,客户端获取后直接用 eval 方法来获得这个对象,这样就可以省去...
我要评论
1
25
关闭 站长推荐上一条 /2 下一条