在ASP中还有什么更好的分页方法(50分)

  • 主题发起人 主题发起人 anita
  • 开始时间 开始时间
A

anita

Unregistered / Unconfirmed
GUEST, unregistred user!
我的MSSQL数据库记录已达6万多条,如果采用recordset的PageSize、PageCount、AbsolutePage分页方法非常占内存效率非常低,请问有什么更好的方法
 
如果数据量大,可以试一下XML,它可以将数据一次下载到客户端Recordset中,以后的分页中的记录只是读取客户端的数据,而不是再一次从服务器上读取.
关于XML的方法,请参考XML相关资料.
 
to waiber:我没听错吧,将数据一次下载到客户端,那不更慢吗,有六万多条记录,分页的目的就是不想一次全部下载
 
学学DFW的分页方法。这里面有yysun的帖子
 
DWF是怎样分页的,在哪里学
还是在这里给讲解一下吧
 
可能我的方法有点[?],说出我的理解,希望大家提提意见
以数据查询分页为例:
数据库查询分页显示是WEB数据库应用程序开发中极其常用的一种方法。
一、传统的WEB程序中,一个数据库查询通常具有如(1-1)的结构。查询的完成,大致可分为以下几步:
(1) 用户通过浏览器向服务器发出请求信息;
(2) 服务器根据用户的请求信息生成相应的查询条件提交数据库服务器;
(3) 数据库服务器执行相应的查询,然后将查询的结果返回到WEB服务器;
(4) 服务器对查询后的结果进行相应的格式进行处理,然后发送给客户浏览器;
(5) 浏览器接收、解释并显示给用户。
浏览器 <------> WEB服务器 <------> 数据库服务器
传统的数据库查询分页方法,用户每查看一页,整个体系都要重复上面5个步骤,也就是说重新生成查询条件,重新到数据库中查询,重新对查询结果进行处理,将用户想看的页面传送给用户的浏览器。该方法的缺点:
· 同样的数据要频繁地到数据库中进行查询;
· 同样的数据要反复地在网络上进行传输;
· WWW服务器要重复地参与分页的运算;
...
可能其它的,呵呵
二、借用COOKIES
使用COOKIES改进查询速度,其主要建立在使用浏览器历史列表的前提上的,也就是说,这种分页的方法只有借助已经浏览的页面时,才能真正达到翻页的效果。如果是第一次浏览页面,其实没有效果。
这不是废话吗?
三、使用XML数据岛技术
使用XML数据岛,将ASP程序查询的记录结果集,转变成一个XML文件传送到客户端,然后从客户端恢复成记录集格式,再在客户端进行分页显示运算。
此种分页查询方法基本思路如下:
(1) 客户端提出分页请求;
(2) WEB服务器根据请条件生成查询条件并提交到数据库服务器;
(3) 数据库服务器执行查询并将查询的结果返回给WWW服务器(RS对象);
(4) WWW服务器接受查询结果将数据(RS对象)格式化XML格式,发送到客户端;
(5) 客户端接受XML文件生成一个DSO对象,然后通过脚本程序显示指定的页。
此后的翻页操作在客户端完成,不再和服务器进行交互,从页实现一次查询多次使用的优点,避免重复查询数据库的缺点,如下:
| | | |
| D | <— | —> 查询条件 |<—————— 查询条件
| | | |
| | | |
| B | --->|RS ---> XML --->| XML ---> RS ---> 显示
| | | |
DB Server WWW Server Explorer
以上方法分页都在客户端进行,无论是浏览过还是没有浏览过,都只需要一次网络传输和一次数据库查询,执行的效率比一般的分页显示方法要先进得多,从根本上实现了客户端翻页技术。
大家以为如何?
 
来自大富翁:
我所知道的有两种方式可供选择,原理都是基于存储过程
方式1: SELECT TOP 10 * FROM TABLE1 WHERE ID IN (SELECT TOP 100 ID FROM TABLE1 O ORDER BY ID ASC) ORDER BY ID DESC
显示第9页的数据,其他的类似
方法2: SELECT IDENTITY(1,1) AS rowid, * FROM TABLE1 INTO #temp
SELECT * FROM #temp WHERE rowid BETWEEN 91 AND 100 ORDER BY rowid DESC
DROP TABLE #temp
对于大数据量来说,第二种方法快一些。
另外,如果使用ado的server cursor,则数据不会下载到客户端,但这样会增加服务器的负载。
 
1. 主键有吧
2. 主键从小到大排序了
3. 从尾向前选择主键字段第1000条得记录集X,取X最大
4. 从头向尾取主键字段第900条,得记录集Y,取Y最大
5. 取X到Y。得100条。即第十页
 
DataGrid中有自定义分页,每次只去一页的内容。
 

Similar threads

后退
顶部