三层架构:
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
相关视频
相关阅读 ie6下面asp.net mvc3 部署应用程序在asp.net mvc中实现右键菜单和简单的分页教程ASP.NET中MVC框架模式方法如何实现分享ASP.NET 2.0 中保护机密数据ASP.NET配置文件Web.configASP.NET 2.0 AJAX中Webservice调用方法ASP.NET 的安全认证实现ASP.NET生成随机密码功能
热门文章 没有查询到任何记录。
最新文章
什么是.NET中的TDD?ASP.NET AJAX入门简介
WebMatrix入门教程VC++2008中如何调用GetOpenFileName打开文件PlaySound函数在VC++6.0中如何播放音乐及声请问VC++回调函数怎么用
人气排行 嵌入式实时操作系统VxWorks入门教程ArrayList 与 string、string[] 的转换C#遍历整个文件夹及子目录的文件代码WebMatrix入门教程asp.net判断文件或文件夹是否存在c#判断数据NULL值的方法vc++6.0怎么写Windows简单窗口代码.net解决数据导出excel时的格式问题
查看所有0条评论>>