快速业务通道

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

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

我们在DAL里添加一个方法来返回这个信息.这个 方法名为TotalNumberOfProducts() ,它会执行上面的SQL语句.

打开 App_Code/DAL 文件夹里的 Northwind.xsd .然后在设计器里右键点 ProductsTableAdapter ,选择Add Query.和我们在以前的教程里学习的那样,这样 会允许我们添加一个新的DAL方法,这个方法被调用时会执行指定的SQL或存储过程 .和前面的TableAdapter 方法一样,为这个添加一个SQL statement.

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

图 1:使用 SQL Statement

在下一个窗体我们可以指定创建哪种 SQL .由于查询只返回一个值–Products表的总记录条数–我们选择 “SELECT which returns a singe value”.

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

图 2:使用 SELECT Statement that Returns a Single Value来配置 SQL

下一步是写SQL语句.

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

图 3: 使用SELECT COUNT(*) FROM Products 语句

最后给这个 方法命名为TotalNumberOfProducts.

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

图 4:将方法命名为 TotalNumberOfProducts

点击结束后,DAL里 添加了一个TotalNumberOfProducts方法.这个方法返回的值可为空,而Count语句 总是返回一个非空的值.

我们还需要在BLL中加一个方法.打开ProductsBLL 类文件,添加一个TotalNumberOfProducts方法,这个方法要做的只是调用DAL的 TotalNumberOfProducts方法.

C# 1
       2
       3
       4 public int TotalNumberOfProducts()
       {
       return Adapter.TotalNumberOfProducts().GetValueOrDefault();
       }

DAL的TotalNumberOfProducts方法返回一 个可空的整型,而需要ProductsBLL类的TotalNumberOfProducts方法返回一个标准 的整型.调用GetValueOrDefault方法,如果可为空的整型为空,则返回默认 值,0.

第三步: 返回需要的数据记录下一步我们要在DAL和BLL里创建接受 Start Row Index 和Maximum Rows 的方法,然后返回合适的记录.我们首先看看需 要的SQL语句.我们面临的挑战是需要为整个分页的记录分配索引,用来返回从 Start Row Index 开始的Maximum Records number of records条记录.

如 果在数据库表里已经有一个列作为索引,那么一切会变的很简单.我们首先会想到 Products表的ProductID字段可以满足这个条件,第一个Product的ProductID为1, 第二个为2,以此类推.然而当一个product被删除后,这个序列会留下间隔来,所以 这个方法不行.

有两种可以把整个要分页的数据和一个row index关联起来 的方法.

使用SQL Server 2005的ROW_NUMBER() Keyword – SQL Server 2005的新特性,它可以将记录根据一定的顺序排列,每条记录和一个等级相 关 这个等级可以用来作为每条记录的row index.

使用SET ROWCOUNT – SQL Server的 SET ROWCOUNT statement 可以用来指定有多少记录需要 处理; table variables 是可以存放表格式的T-SQL 变量, 和temporary tables 类似. 这个方法在Microsoft SQL Server 2005 和SQL Server 2000都可以用 (ROW_NUMBER() 方法只能在SQL Server 2005里用).

这个思路是,为要分页 的数据创建一个table变量,这个table变量里有一个作为主健的IDENTITY列.这样 需要分页的每条记录在table变量里就和一个row index(通过IDENTITY列)关联起 来了.一旦table变量产生,连接数据库表的SELECT语句就被执行,获取需要的记 录.SET ROWCOUNT用来限制放到table变量里的记录的数量.

当SET ROWCOUNT的值指定为Start Row Index 加上Maximum Rows时,这个方法的效率取决 于被请求的页数.对于比较前面的页来说– 比如开始几页的数据–

T(*) FROM Products

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号