asp提交请求后一定几率丢失数据库更新

GoEastward 2009-08-06 01:35:22
不知道大家在asp开发时候是否碰到过,asp提交请求后有一定几率丢失数据库更新,例如新增一个商品,在保存提交后,更新操作的代码也加入了数据库事务以及出错的异常捕捉,但却还是会有时候出现没有任何出错提示,没有捕捉到任何异常的情况下丢失了该次的数据库更新操作,即没有成功插入新记录。大家有何解决方法吗?是否是微软asp本身的缺陷。
...全文
95 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
toury 2009-08-07
  • 打赏
  • 举报
回复
我很早以前曾经遇到过,但没仔细找原因。估计是字段里有和系统保留字冲突的,这种情况不报错但INSERT INTO写不进库,ADDNEW可以。所以后来用INSERT我通通给字段加[]。呵呵
GoEastward 2009-08-07
  • 打赏
  • 举报
回复
好的谢谢,换一种思路,rs('xxx')

我只是好奇,为何在不用储蓄过程的情况如果单纯是在页面用connection对象的execute方法执行sql更新语句,即使加入了事务的异常捕捉会出现一定几率的丢失,而且貌似是根本捕捉不了的。因为如果捕捉得了它会提示的阿。这个在动网access版论坛发帖时候也出现过,还有那些动网access插件。那么我觉得这个是比较糟糕的,糟糕在它没有任何异常捕捉到却丢失了。

我打算用SELECT SCOPE_IDENTITY() AS Current_Identity 来捕捉那个插入的新自增id,然后select一下看看记录集是否为空确保已经插入。
toury 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 goeastward 的回复:]
还想多问一下,你当时是不是大部分情况下能insert进去,但某一、两次丢失了?
抑或数量一共几次,全部都是丢失?
[/Quote]
太遥远的事情不记得了。这样吧,你在判断的时候加多一个条件,看看什么情况:
if conn.errors.count>0 or err then
rollback.........
else
conmitt..........
end if
GoEastward 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 toury 的回复:]
我很早以前曾经遇到过,但没仔细找原因。估计是字段里有和系统保留字冲突的,这种情况不报错但INSERT INTO写不进库,ADDNEW可以。所以后来用INSERT我通通给字段加[]。呵呵
[/Quote]
还想多问一下,你当时是不是大部分情况下能insert进去,但某一、两次丢失了?
抑或数量一共几次,全部都是丢失?
GoEastward 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 toury 的回复:]
我很早以前曾经遇到过,但没仔细找原因。估计是字段里有和系统保留字冲突的,这种情况不报错但INSERT INTO写不进库,ADDNEW可以。所以后来用INSERT我通通给字段加[]。呵呵
[/Quote]
多谢多谢!!!
cwbok 2009-08-06
  • 打赏
  • 举报
回复

rs("xxx")=
试试
GoEastward 2009-08-06
  • 打赏
  • 举报
回复
谢谢楼上的,其实我有部分页面只有一条insert。结构类似动网access版的Dvbbs.excute方法,加入了异常捕捉,但还是有时候会发生千分之一左右有些录入莫名其妙丢失,而且on error 是捕捉不了这个,导致页面跳转到成功更新页。

hookee 2009-08-06
  • 打赏
  • 举报
回复
试试看
conn.execute("insert into tbla(aa,bb) values('aa','bb');insert into tblb(cc,dd) values('cc','dd');")
或用
recordset open,conn,1,4打开批量添加
rs.addnew
...
rs.updateBatch
GoEastward 2009-08-06
  • 打赏
  • 举报
回复
那是否必须把更新操作都改为存储过程才更保险了?
GoEastward 2009-08-06
  • 打赏
  • 举报
回复
因为只是两条Insert,所以更新操作没有使用存储过程:
on error resume next
conn.BeginTrans
conn.execute("insert into tbla(aa,bb) values('aa','bb')")
conn.execute("insert into tblb(cc,dd) values('cc','dd')")
if conn.Errors.Count>0 then
conn.Errors.Clear
conn.RollBackTrans
response.write "有错误"
else
response.write "无错误"
Conn.CommitTrans
end if


cngothic 2009-08-06
  • 打赏
  • 举报
回复
这不可能是ASP本身的缺陷。
从你描述来看应该是SQL上面的问题。你的存储过程有问题吗?
想下。如果你的顺利使用存储过程。在存储过程内利用个个参数进行更新等操作。会不可能不成功吗?
lzp4881 2009-08-06
  • 打赏
  • 举报
回复
没遇到过。这种情况多数都是程序不严谨造成的,别怪这怪那的了。

28,390

社区成员

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

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