快速业务通道

ASP.NET 2.0数据教程之二十五:大数据量时提高分页的效率

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

注意:我们在本教程的后面会看到, ObjectDataSource 提供的StartRowIndex是从0开始的,而ROW_NUMBER()的值从1开 始.因此,WHERE从句返回会严格返回PriceRank大于StartRowIndex而小于 StartRowIndex+MaximumRows的那些记录.

我们已经知道如何根据给定的 Start Row Index 和Maximum Rows 用ROW_NUMBER()返回特定页的数据.现在我们 需要在DAL和BLL里实现它.

我们首先要决定根据什么排序来分级.我们这里 用product名字的字母顺序.这意味着我们还不能同时实现排序的功能.在后面的教 程里,我们将学习如何实现这样的功能.

在前面我们使用SQL statement创 建DAL方法.但是TableAdapter wizard 使用的Visual Stuido里的T-SQL 解析器 不能识别带OVER语法的ROW_NUMBER()方法.因此我们要以存储过程来创建这个DAL 方法.从view menu里选择server explorer(Ctrl+Alt+S),展开NORTHWND.MDF 的节 点.右键点击存储过程,选择增加一个新的存储过程(见图6).

ASP.NET 2.0数据教程之二十五:大数据量时提高分页的效率

图 6: 为Products分页增加一个存储过程

这个存储过程带两个 整型的输入参数- @startRowIndex和@maximumRows- 并用ROW_NUMBER()以 ProductName字段排序,返回那些大于@startRowIndex并小于等于 @startRowIndex+@maximumRows的记录.将以下代码加到存储过程里,然后保 存.

SQL 1
      2
       3
       4
       5
       6
       7
       8
       9
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
       20 CREATE PROCEDURE dbo.GetProductsPaged
       (
       @startRowIndex int,
       @maximumRows int
       )
       AS
       SELECT   ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, CategoryName, SupplierName
       FROM
       (
       SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued,
       (SELECT CategoryName
       FROM Categories
       WHERE Categories.CategoryID = Products.CategoryID) AS CategoryName,
       (SELECT CompanyName
       FROM Suppliers
       WHERE Suppliers.SupplierID = Products.SupplierID) AS SupplierName,
       ROW_NUMBER() OVER (ORDER BY ProductName) AS RowRank
       FROM Products
       ) AS ProductsWithRowNumbers
       WHERE RowRank > @startRowIndex
       WHERE PriceRank > <i>StartRowIndex</i> AND PriceRank <= (<i>StartRowIndex</i> + <i>MaximumRows</i>)

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号