ASP的事务处理
来源:互联网 发布:加藤鹰金手指教程知乎 编辑:程序博客网 时间:2024/05/21 11:06
所谓事务处理,简单地说,就是所有的数据库操作都可以看做事务处理。当开始一个事务处理后,就打开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
%>
用法举例(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
%>
- ASP的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理- -
- ASP.NET里的事务处理
- asp.net的Oracle事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- ASP.NET里的事务处理
- LINQ:查询包含对不同数据上下文上所定义项的引用
- Windows Socket编程
- 第三章 如何决定我们要做什么
- 学习以专攻为要
- LINQ:当尝试更改外键但已加载实体时引发。更改时主外键表时异常
- ASP的事务处理
- Sybase学习笔记
- 面向广播行业和后期制作工程师MPEG-2基本问题
- 通过reverse_iterator删除元素
- 求平均值
- datagird 绑定hyperlink 连接
- 理解 atime mtime ctime
- 在SQL中的text或备注类型中实现模糊查询
- 工作我的事-我的事