分享
 
 
 

[ASP.NET2.0]Repeater C# 分页用法的效率及简单优化(不使用存储过程)

王朝学院·作者佚名  2009-11-06
窄屏简体版  字體: |||超大  

文中http://www.cnblogs.com/xiediy/archive/2008/09/09/1287567.html讲述了Repeater在C Sharp 中的分页方式,我自己在三层架构(大致结构如下)中测试了一下。

三层架构:

1、DAL:封装了SELECT * FROM table事务(1)。

2、BLL:用GetAll()方法封装了对DAL的事务(1)的访问,并返回一个List<Object>。

3、View:通过Repeater遍历出来。

其中:objPage.DataSource = ds.Tables[ " testTable " ].DefaultView;

修改为:objPage.DataSource = tableBLL.GetAll();

测试的结果表示,在Controller(*.aspx.cs)中按上一篇文中的方法定义,空间并不会自动帮你填充Limit条件(如TOP N等),而是不加修改的原封不动地调用你的封装好的方法,原封不动地执行(SELECT * FROM table)获取表的所有数据,就是说,Repeater只会对你返回的结果进行截断处理,就是从数据库中查询所有记录,抽取N条显示在表现层。毋庸置疑,这个效率是很低的。当数据海量时,可以想象这样一次查询的数据量传输占用了多少带宽,还有你的服务器内存。

当你看懂了《[ASP.NET2.0]Repeater C# 分页用法》,其实对这个进行简单的优化也就不难了。只要把GetAll()修改为GetAll(int From , int To),相应改变里面的逻辑便可。具体的分页逻辑,建议用一个PageUtil的辅助类单独封装起来。

关于SQL 2005分页查询,从网上截取到一下内容,请参考 :

http://www.blogjava.net/mlh123caoer/archive/2006/06/10/51819.html

Microsoft SQL Server 2005 查询分页

微软新的SQL Server 2005新增了数据库分页功能,以后再也用写复杂不灵活而低效率的分页存储过程。

新的数据库分页功能的核心是一个叫row_number的函数

具体如下:

返回结果集分区内行的序列号,每个分区的第一行从 1 开始。

语法

ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )

备注

ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。

参数

<partition_by_clause>

将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。

<order_by_clause>

确定将 ROW_NUMBER 值分配给分区中的行的顺序。有关详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。

有关详细信息,请参阅 OVER 子句 (Transact-SQL)。

返回类型

bigint

示例

以下示例将根据年初至今的销售额,返回 AdventureWorks 中销售人员的 ROW_NUMBER。

复制代码

USE AdventureWorks

GO

SELECT c.FirstName, c.LastName, ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number', s.SalesYTD, a.PostalCode

FROM Sales.SalesPerson s JOIN Person.Contact c on s.SalesPersonID = c.ContactID

JOIN Person.Address a ON a.AddressID = c.ContactID

WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0

以下示例将返回行号为 50 到 60(含)的行,并以 OrderDate 排序。

复制代码

USE AdventureWorks;

GO

WITH OrderedOrders AS

(SELECT SalesOrderID, OrderDate,

ROW_NUMBER() OVER (order by OrderDate)as RowNumber

FROM Sales.SalesOrderHeader )

SELECT *

FROM OrderedOrders

WHERE RowNumber between 50 and 60;

==============================

进过我对百万行数据记录的分页测试,效率比以前网上能够找到的最好的存储过程(个人意见)稍高。

但是还是比同样的Oralce的分页效率低。

最后我总结一下,如果想查找按ID排的10~20行的记录,可以这么写:

SELECT *

FROM

(

SELECT ROW_NUMBER() OVER (order by ID) AS rowNum, *

FROM table

)

AS a

WHERE a.rowNum>= 10 AND a.rowNum<=20

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有