我有两种办法.(是说ASP.Net吧,用datagrid)
1.使用datagrid的分页属性,不用贴代码了吧,这种方法虽然可以实现分页,但是服务器端是要执行大量的查询操作.2.大体思路如下:
假设分页,每页50.在数据库中有一个不重复的索引,假设是ID.
第一页, select top 50 * froom table ,查询简单,快. 然后记住第50条的ID,
第二页, select top 50 * from table where ID > 你记录的ID.
依次类推.
当然,写出存储过程就更快了.3.由于ADO.Net目前的版本不支持,服务器端的游标,微软说以后的版本会支持,支持以后,用这个一个更方便.4.实际上,减少网络的通讯量才是关键.

解决方案 »

  1.   

    或者可以使用临时表
    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.   

    子查询?
    假设表中有个标识主键ID,从1开始递增
    当前页:
    int cur = DataGrid.CurrentPageIndex;
    每页显示i行
    那命令就是
    SELECT TOP i * FROM 
      SELECT TOP i*cur * FROM table ORDER BY ID DESC
    ORDER BY ID
      

  3.   

    输入一个分页关键信息,就能帮你自动生成分页的存储过程,速度快,可以直接到达指定的任意页数。如果您对这个程序感兴趣,可以联系 [email protected]
      

  4.   

    查询结果分页是以较小数据子集(即页)的形式返回查询结果的过程。它通常用于以易于管理的小块区的形式向用户显示结果。
    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); 
      

  5.   

    假设每页显示n条记录,当前的显示位置为p
    int p=o;
    第一页, 
    select top 每页显示的记录条数n * from table ;
    下一页, 
    p+=每页显示的记录数n;
    select top 每页显示的记录条数n * from table where ID > 位置p.
      

  6.   

    我现在成功使用.net中的XmlDataDocument,XslTransform实现分页显示:
    1.XmlDataDocument myxml=new XmlDataDocument(dataset);
    2.在myxml写入分页信息的Node;
    3.编写相应的xsl文件,在xsl中通过<xsl:if test="position() >= $start and position()  &lt;= $end"></xsl:if>控制分页显示
    4.通过XslTransform将xml转换为html.
    但我觉得这种实现方法效率不高,每次都要从数据库中取出所有数据,数据量大时,速度肯定很慢。
    以前我用PHP+MYSQL编写分页程序时,只需通过sql语句“select * from table order by time desc limit $start,$offset”就可以实现。
        我觉得采用SQL Server数据库时的分页因难,主要是因为SQL Server没有提供分页的SQL语句。
      

  7.   

    ToBeCharcoal(真想有星星):说的好!
      

  8.   

    我觉得在Sql Server中根本没有好的实现分页的方式,真是令人头疼。首先是将所有的记录取出来,不管我们用什么方式在取出的结果集上操作,但是这根本不是好方法。因为在取出所有数据的时候就已经浪费了大量的时间及资源。TheAres(班门斧)提供的第二种方法是有一点作用,但是我直接跳转到第n页的话我怎么找前一页的ID?
    mmkk() ( ) 兄的临时表是不是也全取出来再进行筛选的阿?
    javanow(想我生命的意义)兄的游标是在存储过程里使用的吗?那岂不是也很浪费时间?
    ToBeCharcoal(真想有星星)兄的取一段记录看起来很不错,其实在SqlDataAdapter填充DataSet之前就已经把所有的记录取回来了。
    我觉得brbrm(般若波若密)兄的方法还好一些,但是我翻到很多页的时候也是个问题!以上愚见,仅是讨论,各位海涵。