測試的結果表示,在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;