一个难题,想了N天了,希望高手进来帮帮忙

lovewindy 2004-06-10 08:43:08
最近在做项目的时候遇到一个问题
我有N条SQL语句(都是修改或删除之类会影响到数据库的语句)
但发现如果这些语句刚好运行到一半的时候遇到意外事件(如停电或软件被关闭),则数据库就会出错,不知道有没什么方法可以将这N条语句打包成一个整体,要么会做,要么会不做。
不知道这是不是属于事务问题,
但我试了用事务,但是事务只对运行到中途发生SQL语句出错才有作用,如果语句正常,只是中途跳转了,好像也没什么效果,
可能是我事务用错了,也希望高手指教我在ASP中如何用事务,


希望高手指教啊,先谢谢了。,
...全文
155 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenqhy 2004-06-15
  • 打赏
  • 举报
回复
翻翻书吧
lovewindy 2004-06-12
  • 打赏
  • 举报
回复
不是吧,都写在一起,我没试过行不行,但总觉得有点牵强,
而且既然有了事务,最好能用上去,更何况以后还是会遇到的,能学点东西总是好的
所以希望哪位大哥能帮帮小弟,让我学点东西啊,先谢了
meihua29 2004-06-11
  • 打赏
  • 举报
回复
将所有的命令写在一个句子里,然后执行。例如sql="insert into tablename .....;delete table ....;modify table ...;"
Database.execute sql

在这种情况下,如果有一条失败了,那么所有的命令都失败
lovewindy 2004-06-11
  • 打赏
  • 举报
回复
不是吧,真的没人来帮忙了???还是真的没人知道啊,
lang11zi 2004-06-10
  • 打赏
  • 举报
回复
必须回滚
wengfengli 2004-06-10
  • 打赏
  • 举报
回复
如果突然断电,你不用判断,它会自动ROLLBACK。
gaoqianjin 2004-06-10
  • 打赏
  • 举报
回复
up一下,请高手多讲点,学习呢
yslcuk 2004-06-10
  • 打赏
  • 举报
回复
这是ORACLE的做法:
调用 rollback to savepoint 语句回滚新插入的数据行,最后提交整个事务.
如:
BEGIN
delete .....;
savepoint s1;
insert into .....
rollback to savepoint s1;(回滚至删除时)
commit;(提交事务)
end;
lovewindy 2004-06-10
  • 打赏
  • 举报
回复
那我怎么判断是出错还是正常呢,
因为我遇到的问题是当正在运行的时候突然断电,或是网页被关闭了,不知道我该怎么判断
guihengzhang 2004-06-10
  • 打赏
  • 举报
回复
如果出错的话
就 cn1.Rollback
wengfengli 2004-06-10
  • 打赏
  • 举报
回复
假定cn1为Connection:

cn1.BeginTrans
.
.
.
cn1.Execute("UPDATE table1 set x='11'")
cn1.Execute("UPDATE table2 set y='12'")
cn1.Execute("UPDATE table3 set z='13'")
cn1.Execute("UPDATE table4 set a='14'")


cn1.CommitTrans
QCB181 2004-06-10
  • 打赏
  • 举报
回复
帮你顶
  • 打赏
  • 举报
回复
搬个板凳来学习。。。今天早上刚刚看了事务,但是还没怎么明白那
lovewindy 2004-06-10
  • 打赏
  • 举报
回复
真的会在第两次打开网页时自动回滚吗??
但为什么我也是这么做的,却没反映啊,照样出错,是不是我事务做错了,


REM 事务开始
enconn.begintrans
enconn.execute("update product set productorder=(select productorder from product where Id='"&productId&"') where username='"&strUserName&"' and productGroup='"&oldcategoryid&"' and productorder=(select count(productorder) from product where username='"&strusername&"' and productGroup='"&oldcategoryid&"')")
enconn.execute("update product set productorder=(select count(productorder) from product where username='"&strusername&"' and productGroup='"&newcategoryid&"')+1,productgroup='"&newcategoryid&"' where id='"&productId&"'")
if enconn.errors.count>0 then
enconn.rollbacktrans
enconn.close
set enconn=nothing
response.redirect "Managecategory.asp"
response.end
else
enconn.committrans
enconn.close
set enconn=nothing
response.redirect "Managecategory.asp"
response.end
end if
REM 事务结束

我将我的源码公布了,不知道我用事务的方法是不是错了,请哪位大哥帮我一下

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧