测试的结果表示,在Controller(*.aspx.cs)中按上一篇文中的方法定义,空间并不会自动帮你填充Limit条件(如TOP N等),而是不加修改的原封不动地调用你的封装好的方法,原封不动地执行(SELECT * FROM table)获取表的所有数据,就是说,Repeater只会对你返回的结果进行截断处理,就是从数据库中查询所有记录,抽取N条显示在表现层。毋庸置疑,这个效率是很低的。当数据海量时,可以想象这样一次查询的数据量传输占用了多少带宽,还有你的服务器内存。
当你看懂了《[asp.net2.0]Repeater C# 分页用法》,其实对这个进行简单的优化也就不难了。只要把GetAll()修改为GetAll(int From , int To),相应改变里面的逻辑便可。具体的分页逻辑,建议用一个PageUtil的辅助类单独封装起来。
复制代码 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;