ASP.NET 2.0数据教程之二十五:大数据量时提高分页的效率
T(*) FROM Products
我们在DAL里添加一个方法来返回这个信息.这个 方法名为TotalNumberOfProducts() ,它会执行上面的SQL语句. 打开 App_Code/DAL 文件夹里的 Northwind.xsd .然后在设计器里右键点 ProductsTableAdapter ,选择Add Query.和我们在以前的教程里学习的那样,这样 会允许我们添加一个新的DAL方法,这个方法被调用时会执行指定的SQL或存储过程 .和前面的TableAdapter 方法一样,为这个添加一个SQL statement. 图 1:使用 SQL Statement 在下一个窗体我们可以指定创建哪种 SQL .由于查询只返回一个值–Products表的总记录条数–我们选择 “SELECT which returns a singe value”. 图 2:使用 SELECT Statement that Returns a Single Value来配置 SQL 下一步是写SQL语句. 图 3: 使用SELECT COUNT(*) FROM Products 语句 最后给这个 方法命名为TotalNumberOfProducts. 图 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时,这个方法的效率取决 于被请求的页数.对于比较前面的页来说– 比如开始几页的数据– |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |