以下摘自MSDN:“查询结果分页”
DataAdapter 提供了通过 Fill 方法的重载来仅返回一页数据的功能。但是,对于大量的查询结果,它可能并不是首选的分页方法,因为 DataAdapter 虽然仅使用所请求的记录来填充目标 DataTable 或 DataSet,但仍会使用返回整个查询的资源。若要在从数据源中返回一页数据时不使用返回整个查询的资源,请为查询指定附加条件,使返回的行数减少到只返回所需的行。请记住,即使仅在 DataSet 中添加一页记录,数据库服务器仍会返回全部查询结果。
在上例中,DataSet 只填充了 5 个记录,但却返回了整个 Orders 表。若要用相同的 5 个记录填充 DataSet 但仅返回这 5 个记录,请在 SQL 语句中使用 TOP 和 WHERE 子句,如以下代码示例所示。
请注意,当以这种方式进行查询结果分页时,必须保留用于对行进行排序的唯一标识符,
以便将唯一 ID 传递给用于返回下一页记录的命令,如以下代码示例所示。
string lastRecord = dataSet.Tables["Orders"].Rows[pageSize - 1]["OrderID"].ToString();在以下代码示例中,先清除表行,然后再用下一页数据填充这些表行。您可能需要在本地缓存中保留一定数量的返回行,以减少与数据库服务器的往返次数。若要返回下一页记录而不让数据库服务器返回整个查询,请指定对 SQL SELECT 语句的限制条件。
由于上例保留了返回的最后一个记录,因此可以在 WHERE 子句中使用它来指定查询的起点,如以下代码示例所示。