日期:2014-05-17  浏览次数:21291 次

请教:asp处理大量数据的时候,如何避免超时
比如我要给1万个会员批量更新数据,但里面的逻辑太复杂,我希望每执行1000个会员的时候,程序能中断,相当于结束,然后,一会,或几秒钟后,从1001个会员开始,继续操作处理,执行到2000的时候又中断一次,,,就是这个算法如何理解?不然一点按钮就这样执行下去,肯定页面会报错的

设置脚本超时的方法肯定是行不通的。。。
以前用过动易的采集系统,比如采集几千条数据的时候,他们的机制是,每采集100条或者更多,程序会中断一下,然后继续工作,这样避免页面超时

我想问问,这个机制在asp如何能够实现


------解决方案--------------------
我觉得可以分段进行.然后设置时间自动刷新.
------解决方案--------------------
用分页处理啊
Set rs= Server.CreateObject("ADODB.Recordset")
rs.CursorType=3
rs.PageSize=1000
rs.Open SQL,Conn
page=trim(Request("page"))
if not isnumeric(page) or page="" then
page=1
end if

if page<rs.pageCount then
page=rs.pageCount
.....
Response.write("<Script>location.href='thisweb.asp?page='"& page + 1 &"';</script>")
Response.end
else
Response.write("数据已经处理完毕..")
Response.end
end if

------解决方案--------------------
用存储过程来做。然后是否结束的标志显示在网页上,可以通过客户端手动或是script刷新网页的方法来得知是否结束
总之,不能在ASP里去干这件事儿,太不现实了
不能同步,异步进行。
存储过程的调用要立即反回,设置互斥变量,以阻止相互冲突的数据库访问
------解决方案--------------------
我明白楼主的意思

你这样处理:每处理到1000条你需要停住的地方的时候,用程序判断条件是否到达该停住的地方,该停的时候,用程序控制输出response.write或其他的方式改变页面的刷新时间间隔,<meta http-equiv="Refresh" content="5;URL=当前页面名称或地址"> 由于刷新的时候,程序会又从第一条记录开始操作,所以你要在数据库中对每条记录做个标志,比如flag设置为0或1或true或false来判断,每更新完一个会员信息的时候将其标志设置为1,页面在执行的时候都是查询标志为0的记录,这样就会不停的向下去更新会员资料,每更新完1000条程序就会停止5秒钟。