+ -
当前位置:首页 → 问答吧 → 如果do while执行一半,断电了

如果do while执行一半,断电了

时间:2011-10-11

来源:互联网

数据库中有几万个数据,对某几千条数据 的处理,代码如下
VBScript code

sql="......."
set rs=........................
rs.open sql,conn,1,3
do while not rs.eof
    rs("字段")=值
    rs.update'更新
    rs.movenext
loop



问题一:
假设这个循环执行1000次,每次都调用一次update。 如果执行到500次的时候断电了。请问,这500次,会保存到数据库吗?

问题二:
注意看我的代码,请问是在每次循环的时候调用update还是全部执行完了,do....loop之后 再调用一个update?哪个更好?为什么?

作者: fisherboy   发布时间: 2011-10-11

一般这种情况都是写到存储过程里面的 ...

作者: qianzai5765638   发布时间: 2011-10-11

错了 事务里面

作者: qianzai5765638   发布时间: 2011-10-11

1.不一定.要看硬盘是写入缓存还是直接写入介质.
2.别用rs.update这种变态的语句,把记录集读到客户端,再返回来把记录集全部更新保存一遍,有这样的操作必要嘛!

要更新,应该写出一个完整的 update 语句来进行操作,而不要对记录集进行操作.

作者: qianjin036a   发布时间: 2011-10-11

引用 3 楼 qianjin036a 的回复:
1.不一定.要看硬盘是写入缓存还是直接写入介质.
2.别用rs.update这种变态的语句,把记录集读到客户端,再返回来把记录集全部更新保存一遍,有这样的操作必要嘛!

要更新,应该写出一个完整的 update 语句来进行操作,而不要对记录集进行操作.


那该怎么写法?

作者: helloclm   发布时间: 2011-10-11

引用 4 楼 helloclm 的回复:

引用 3 楼 qianjin036a 的回复:
1.不一定.要看硬盘是写入缓存还是直接写入介质.
2.别用rs.update这种变态的语句,把记录集读到客户端,再返回来把记录集全部更新保存一遍,有这样的操作必要嘛!

要更新,应该写出一个完整的 update 语句来进行操作,而不要对记录集进行操作.


那该怎么写法?


对啊,那该怎么写?


我的情况是几万条记录中的 几千条需要处理而已

作者: fisherboy   发布时间: 2011-10-11

你现在这么写断电了是什么时候断保存到什么时候的  
这样执行数据库次数比较多 可能会比较慢 
如果像你说的第二种方法就是只执行一次数据库 如果中途断电了就不会保存

作者: qishaoyeyyy   发布时间: 2011-10-11

意思是 

sql="......."
set rs=........................
rs.open sql,conn,1,3
do while not rs.eof
  rs("字段")=值
  rs.movenext
loop

 rs.update'更新

把这个更新拿到外面来?

作者: helloclm   发布时间: 2011-10-11

如果是在循环中直接保存到数据库,然后再进行的下一个循环,那么就肯定保存了,如果是先以媒介的形式没保存到数据库,那么就不能保存到数据库

作者: lml926it   发布时间: 2011-10-11

1、已经执行的500条记录,不一定保存到硬盘,多数硬盘是先把数据写到其缓存,在空闲时间,才把数据写入盘片,就是要看电断到什么时刻了。当然高性能硬盘,在断电后,还可以通过惯性保存数据,但也不一定有把握

2、用后者

其实,你弄个继电器,或者备份服务器等方法解决

作者: From_TaiWan   发布时间: 2011-10-11

一般这种情况都是写到存储过程里面的 ...

作者: zhgl322   发布时间: 2011-10-11

上次回答過了,用rs.UpdateBatch,一次遞交即可。一般不會用循環遞交,太耗資源了.

作者: hookee   发布时间: 2011-10-11