加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

在ASP中改进动态分页的性能

发布时间:2023-08-07 14:15:00 所属栏目:Asp教程 来源:
导读:概 述

---- 现在有不少介绍利用ASP实现动态分页的文章,方法大同小异,就是每次利用ADO返回原始数据满足条件记录集中的指定页。但在实际工程应用中,原始数据量通常很大,原始数据的加工比较慢,如果每次换页原始
概 述
 
---- 现在有不少介绍利用ASP实现动态分页的文章,方法大同小异,就是每次利用ADO返回原始数据满足条件记录集中的指定页。但在实际工程应用中,原始数据量通常很大,原始数据的加工比较慢,如果每次换页原始数据都要加工一次,则会严重影响应用程序运行的性能。
 
---- 解决上述问题主要有两种途径:一种途径是将查询条件相对固定,利用相对固定的查询条件对原始数据进行加工,生成一个小数据量的中间库,每次查询都对中间库进行操作。这样虽然会提高程序的性能,但会影响程序的灵活性,而且 Server端还需定时对原始数据进行加工维护。另一个途径是在Server端保存查询的结果。这样虽然不能改善查询的性能,但Client端换页时Server端能够很快响应。第一种途径的实现比较简单,本文介绍第二种途径的实现方法。
 
实现方法
 
----将Server端的查询结果保存在一个动态数组中,即在 Session_OnStart过程中声明一个二维的动态数组。当Server端收到Client端提交的申请后,首先判断申请是条件查询还是换页,如是条件查询则判别查询条件是否与上次提交的查询条件不同,如不同则执行查询,将查询结果保存在该数组中,然后向Client端返回第一页的内容,否则直接从该数组中返回相应页的内容。
 
 
程序实现:
 
----1.定义二维数组及其他变量
 
以下是代码片段:
 
Sub Session_OnStart
 
dim TempDb()
 
redim Preserve TempDb(1,2)
 
session(“StoredArray") = TempDb
 
’定义一个Session数组
 
session(“iPageCount")=0
 
session(“iPageNo")=0
 
......
 
End Sub
 
 
----2.调用存储过程返回数据
 
 
以下是代码片段:
 
Sub GetRecordSet(strBbmc,strKssj ,
 
strZzsj ,strNodeCode ,strFxzl )
 
’’参数为报表名称和各个限制条件
 
select case strBbmc
 
case “交易汇总表"
 
strCnn=“PROVIDER=MSDASQL;dsn=sqldb;
 
uid=sa;pwd=123456;database=vlog;"
 
Set objcnn=Server.CreateObje(“ADODB.Connection")
 
objcnn.CommandTimeout = 9999999
 
objcnn.ConnectionTimeout = 99999999
 
objcnn.CursorLocation = adUseClient
 
objcnn.Open strCnn ’’打开连接
 
Set objRs =Server.CreateObject
 
(“ADODB.Recordset")
 
objRS.PageSize = iPageSize
 
objRS.CacheSize = iPageSize
 
objRs.Open “sszhatmlog ‘“ & strKssj & "’’ ,
 
‘“ & strZzsj & "’’, ‘“ & strNodeCode & "’’ ,
 
‘“ & strFxzl & "’’",objcnn,adOpenStatic ,
 
adLockReadOnly,1
 
’执行存储过程返回查询结果
 
......
 
End Sub
 
----3.将查询结果保存到动态数组
 
以下是代码片段:
 
Sub SaveRecordSet()
 
if objRs.EOF = false then
 
objRs.movelast
 
session(“iRowCount") = objRs.recordCount
 
session(“iFieldCount") = objRs.Fields.Count
 
session(“iPageCount") = objRs.pagecount
 
redim Preserve TempArray(session
 
(“iRowCount"),session(“iFieldCount"))
 
’TempArray是一个二维动态数组,
 
根据记录集大小重新定义其大小
 
objRs.MoveFirst
 
iCount=0
 
do while objRs.EOF=false
 
iCount = iCount + 1
 
for i= 1 to session(“iFieldCount")
 
TempArray(iCount,i)=objRs.Fields.Item
 
(i-1).value
 
next
 
objRs.MoveNext
 
loop
 
session(“StoredArray") = TempArray
 
objRs.Close
 
else
 
session(“iPageCount") = 0
 
end if
 
End Sub
 
----4.显示记录内容
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章