A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 石国庆 中级黑马   /  2013-3-26 22:34  /  2153 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能说讲一下数据分页的具体实现方法,最好是高效的

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

10 个回复

倒序浏览
这个可以用sql语句实现,有两种方法:
假设一页的数据5条,你现在查第3页的内容
1、select top 5 * from 表名 where 主键名 not in(
select top 2*5 主键名 from 表名
)

2、select * from
(select *,Row_Number() over(order by 随便一个字段名) as row from 表名) as temp
where temp.row>=11 and temp.row<=15
回复 使用道具 举报
1. 在强类型DataSet中增加取得所有数据条数的方法QueryCount,增加取得指定行数范围数据的方法GetPagedData:select * from
2. ObjectDataSource中EnablePaging属性设置为true,SelectCountMethod设置为QueryCount,SelectMethod设置为GetPagedData.
回复 使用道具 举报
这个问题咋回答你呢? 你所只的高效是需要处理多少数据以上才能称为高效?那我就在这里做个比较吧:
当你使用服务器端控件进行分页时,他是很方便但是在处理较多数据时就变得非常慢了,原因是每次进行页面跳转其实他是查询了表中所有数据,导致执行效率低。
我平时处理分页的方法是通过数据库写存储过程来实现,这样的好处是空间和数据库服务器都能合理进行数据处理就不会导致某一台服务器cpu上彪,另一台基本啥都不做合理分配资源,虽谈不上什么高效,但相对GridView这些控件的自带分页要快些了。

alter PROCEDURE GetPageDataOutRowPageCount
(
@PageIndex int = 1,--当前页数
@PageSize  int = 4,--每页大小
@NowPage   int = 1,--根据传入栏目id要加载当前页的数据
@RowCount int output,--总行数(传出参数)
@PageCount int output--总页数(传出参数)
)
AS
begin
        DECLARE @sql NVARCHAR(225)
        select @RowCount =COUNT(FCaseChildId),@PageCount=CEILING((COUNT(FCaseChildId)+0.0)/@PageSize) FROM TCaseContent where FParentsId=@NowPage
        SET @sql='SELECT TOP '+str(@PageSize) +' * FROM TCaseContent  where FParentsId='+str(@NowPage)+' and FCaseChildId not in(select top '+str((@PageIndex-1)*@PageSize) +' FCaseChildId from TCaseContent where FParentsId='+str(@NowPage)+')'
        EXEC(@sql)
end

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
黑马-杨鹏立 发表于 2013-3-27 01:41
这个问题咋回答你呢? 你所只的高效是需要处理多少数据以上才能称为高效?那我就在这里做个比较吧:
当你使 ...

我还是个菜鸟,暂时还看不懂你这个,先留着,谢了
回复 使用道具 举报
胡志超 发表于 2013-3-26 22:45
这个可以用sql语句实现,有两种方法:
假设一页的数据5条,你现在查第3页的内容
1、select top 5 * from 表 ...

第二个能具体的解释一下吗,有点看不懂
回复 使用道具 举报
许庭洲 发表于 2013-3-26 23:12
1. 在强类型DataSet中增加取得所有数据条数的方法QueryCount,增加取得指定行数范围数据的方法GetPagedData: ...

这个太深奥了
回复 使用道具 举报
石国庆 发表于 2013-3-27 20:37
第二个能具体的解释一下吗,有点看不懂

那是SqlServer2005之后出的一种新方法,就是这么用的。
回复 使用道具 举报
石国庆 发表于 2013-3-27 20:36
我还是个菜鸟,暂时还看不懂你这个,先留着,谢了

客气了,我们来到黑马都是同一目标。。。大家都是战友相互扶持是应该的。。。。加油
回复 使用道具 举报
许庭洲 发表于 2013-3-26 23:12
1. 在强类型DataSet中增加取得所有数据条数的方法QueryCount,增加取得指定行数范围数据的方法GetPagedData: ...

这个方法您能给你简单的小例子吗?期待这个方法!
回复 使用道具 举报
我给解释一下吧,关于二楼的回答,嗯假设myorders就是一个表名吧,
select * from myorders
--数据分页,五条数据一页,在sql2005以前的版本中的方法
--取第一页的数据,
select top 5 * from myorders order by id asc
--取第二页的数据
select * from myorders

select top 5 * from myorders
where id not in
(
  select top(5 *1) id from myorders order by id asc
)
order by id asc
--取第三页的数据
select top 5 * from myorders
where id not in
(
   select top (5*2) id from myorders order by id asc
)
order by id asc
--======================sqlserve 2005 以后中分页的方法====================
--取第三页的数据
select * from
(
   select * ,row_number() over(order by id asc) as rnumber
   from myorders
)as tb
where tb.rnumber between 2*5+1 and 3*5
--取得第八页的数据
select * from
(
   select * ,row_number() over(order by id asc)as rnumber
   from myorders
)as tb
where tb.rnumber between 7*5+1 and 8*5

希望能够帮到你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马