查询结果分页是以较小数据子集(即页)的形式返回查询结果的过程。它通常用于以易于管理的小块区的形式向用户显示结果。
DataAdapter 提供了通过 Fill 方法的重载来仅返回一页数据的功能。若要使用 Fill 方法返回一页数据,请指定 startRecord(它指定该数据页的第一个记录),并指定 maxRecords(它指定该数据页中的记录数)。
int currentIndex = 0;
int pageSize = 5;
string orderSQL = "SELECT * FROM Orders ORDER BY OrderID";
SqlDataAdapter myDA = new SqlDataAdapter(orderSQL, nwindConn);
DataSet myDS = new DataSet();
myDA.Fill(myDS, currentIndex, pageSize, "Orders");
若要实现分层数据访问,可以使用 .NET 框架中的可用 XML 类。.NET 框架允许分别通过 DataSet 对象和 XmlDataDocument 对象对数据的关系和分层表示形式进行实时、同步的访问。
当 DataSet 与 XmlDataDocument 同步时,这两个对象都使用同一组数据。这意味着如果对 DataSet 作出更改,更改将在 XmlDataDocument 中得到反映,反之亦然。DataSet 和 XmlDataDocument 之间的这种关系允许单个应用程序使用一组数据来访问围绕 DataSet 生成的整组服务(例如 Web 窗体和 Windows 窗体控件以及 Visual Studio .NET 设计器)以及包括可扩展样式表语言 (Extensible Stylesheet Language, XSL)、XSL 转换 (XSLT) 和 XML 路径语言 (XPath) 在内的 XML 服务组,从而提供了很大的灵活性。您不必选择使应用程序以哪一组服务为目标——这两组服务都可用。
有若干种方法可以使 DataSet 与 XmlDataDocument 同步。
使用架构(关系结构)和数据填充 DataSet,然后使其与新 XmlDataDocument 同步。这将提供现有关系数据的分层视图。例如:
DataSet myDataSet = new DataSet();
// Add Code here to populate the DataSet with schema and data.
XmlDataDocument xmlDoc = new XmlDataDocument(myDataSet);
子查询?
假设表中有个标识主键ID,从1开始递增
当前页:
int cur = DataGrid.CurrentPageIndex;
每页显示i行
那命令就是
SELECT TOP i * FROM
SELECT TOP i*cur * FROM table ORDER BY ID DESC
ORDER BY ID
或者可以使用临时表
select 字段1,字段2,IDENTITY(int,1,1) as Num into #temp1 from tablename ...
select * from temp1 where Num>CurrentPageIndex*PageSize and Num<(CurrentPageIndex+1)*PageSize
2.大体思路如下:
假设分页,每页50.在数据库中有一个不重复的索引,假设是ID.
第一页, select top 50 * froom table ,查询简单,快. 然后记住第50条的ID,
第二页, select top 50 * from table where ID > 你记录的ID.
依次类推.
当然,写出存储过程就更快了.