查询结果分页

ContractedBlock.gif ExpandedBlockStart.gif
None.gif查询结果分页是以较小数据子集(即页)的形式返回查询结果的过程。它通常用于以易于管理的小块形式向用户显示结果。
None.gif
None.gifDataAdapter 提供了通过 Fill 方法的重载来仅返回一页数据的功能。但是,对于大量的查询结果,它可能并不是首选的分页方法,因为 DataAdapter 虽然仅使用所请求的记录来填充目标 DataTable 或 DataSet,但仍会使用返回整个查询的资源。若要在从数据源中返回一页数据时不使用返回整个查询的资源,请为查询指定附加条件,使返回的行数减少到只返回所需的行。
None.gif
None.gif若要使用 Fill 方法返回一页数据,请指定 startRecord 参数(代表该数据页中的第一个记录),并指定 maxRecords 参数(代表该数据页中的记录数)。 
None.gif
None.gif以下代码示例显示如何使用 Fill 方法来返回查询结果(页大小为 
5 个记录)的第一页。
None.gifC# 复制代码
None.gif
int currentIndex = 0;
None.gif
int pageSize = 5;
None.gif
None.gif
string orderSQL = "SELECT * FROM Orders ORDER BY OrderID";
None.gif
// Assumes that connection is a valid SqlConnection object.
None.gif
SqlDataAdapter adapter = new SqlDataAdapter(orderSQL, connection);
None.gif
None.gifDataSet dataSet 
= new DataSet();
None.gifadapter.Fill(dataSet, currentIndex, pageSize, 
"Orders");
None.gif
None.gif在上例中,DataSet 只填充了 
5 个记录,但却返回了整个 Orders 表。若要用相同的 5 个记录填充 DataSet 但仅返回这 5 个记录,请在 SQL 语句中使用 TOP 和 WHERE 子句,如以下代码示例所示。
None.gif
None.gifC# 复制代码
None.gif
int pageSize = 5;
None.gif
None.gif
string orderSQL = "SELECT TOP " + pageSize + 
None.gif  
" * FROM Orders ORDER BY OrderID";
None.gifSqlDataAdapter adapter 
= new SqlDataAdapter(orderSQL, connection);
None.gif
None.gifDataSet dataSet 
= new DataSet();
None.gifadapter.Fill(dataSet, 
"Orders");
None.gif
None.gif请注意,当以这种方式进行查询结果分页时,必须保留用于对行进行排序的唯一标识符,以便将唯一 ID 传递给用于返回下一页记录的命令,如以下代码示例所示。
None.gifC# 复制代码
None.gif
string lastRecord = 
None.gif  dataSet.Tables[
"Orders"].Rows[pageSize - 1]["OrderID"].ToString();
None.gif
None.gif若要使用接受 startRecord 和 maxRecords 参数的 Fill 方法的重载来返回下一页记录,请使当前记录索引按页大小递增,并填充该表。请记住,即使仅在 DataSet 中添加一页记录,数据库服务器仍会返回全部查询结果。在以下代码示例中,先清除表行,然后再用下一页数据填充这些表行。您可能需要在本地缓存中保留一定数量的返回行,以减少与数据库服务器的往返次数。
None.gifC# 复制代码
None.gifcurrentIndex 
+= pageSize;
None.gif
None.gifdataSet.Tables[
"Orders"].Rows.Clear();
None.gif
None.gifadapter.Fill(dataSet, currentIndex, pageSize, 
"Orders");
None.gif
None.gif若要返回下一页记录而不让数据库服务器返回整个查询,请指定对 SQL SELECT 语句的限制条件。由于上例保留了返回的最后一个记录,因此可以在 WHERE 子句中使用它来指定查询的起点,如以下代码示例所示。
None.gifC# 复制代码
None.giforderSQL 
= "SELECT TOP " + pageSize + 
None.gif  
" * FROM Orders WHERE OrderID > " + lastRecord + " ORDER BY OrderID";
None.gifadapter.SelectCommand.CommandText 
= orderSQL;
None.gif
None.gifdataSet.Tables[
"Orders"].Rows.Clear();
None.gif
None.gifadapter.Fill(dataSet, 
"Orders");
None.gif
None.gif

转载于:https://www.cnblogs.com/flyingbird/archive/2007/03/06/665895.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值