小弟新手
目前在做一项目
对于分页问题
要求查询效率要高
想问一下大家有什么有什么好做法另外想问一下
如果用SqlDataAdapter.Fill方法做分页的话效率如何
据说它不用取出所有数据
不知道是不是真的

解决方案 »

  1.   

    .net2.0 gridview有自带的分页功能,不知道效率如何,我想应该是一优化过的吧
    只要把gridview的分页属性设置为TRUE就可以了
      

  2.   

    用存储过程分页,如果省事情就用第3方控件。aspnetpager
      

  3.   

    2005做分页的话,不用写什么代码就可以搞定了!
      用用存储过程分页,如:
           EXEC  p_splitpage  @sql, @PageIndex ,@PageSize,0p_splitpage       系统存储过程
    @sql 为查询语句
    @PageIndex  为起始页
    ,@PageSize  每页多少条记录
    0   随便写的 不知道什么意思
      

  4.   

    参考:
    http://www.codeproject.com/aspnet/PagingLarge.asp我用的方法:(注意-----)
    CREATE PROCEDURE [dbo].[usp_GetCompanyList]
    @condition varchar(200),
    @pagesize int,
    @currentpage int,
    @pagecount int out,
    @rowcount int out
    AS
    BEGIN
    CREATE TABLE #Temp(
    [TempId] [int] IDENTITY(1,1) NOT NULL,
    ---------------
    )
    declare @sql varchar(1000)
    set @sql = 'INSERT INTO #Temp (------------------) 
    SELECT ------ FROM [dbo].[Company] as C 
    join [dbo].[Server] as S on C.[ServerId]=S.[ServerId] where C.[IsDeleted]=0 '
    if (@condition is not null and @condition<>'')
    begin
    set @sql = @sql + ' and ' + @condition
    end
    set @sql = @sql + ' order by C.[CompanyId] desc' exec(@sql) --返回总记录数
    select @rowcount = count(0) from #Temp
    --返回总页数
    set @pagecount = ceiling(@rowcount * 1.0/@pagesize) --临时表的起始Id
    declare @FromId int
    set @FromId = (@currentpage - 1) * @pagesize + 1
    --临时表的结束Id
    declare @ToId int
    set @ToId = @currentpage * @pagesize  select * from #Temp where TempId between @FromId and @ToId
    END
      

  5.   

    SqlDataAdapter.Fill
    ----这个是填充dataset和分页有什么关系,没听说过啊
      

  6.   

    SqlDataAdapter.Fill
    可以在填充的时候指定起始记录和要取记录的数量
      

  7.   

    分页, 效率高, 填充当前页记录
    --------------------------------------public System.Int32 Fill ( System.Data.DataSet dataSet , System.Int32 startRecord , System.Int32 maxRecords , System.String srcTable )
        System.Data.Common.DbDataAdapter 的成员摘要:
     在 System.Data.DataSet 的指定范围中添加或刷新行以匹配使用 System.Data.DataSet 和 System.Data.DataTable 名称的数据源中的行。  参数:
    dataSet: 要用记录和架构(如果必要)填充的 System.Data.DataSet。 
    startRecord: 从其开始的从零开始的记录号。 
    maxRecords: 要检索的最大记录数。 
    srcTable: 用于表映射的源表的名称。 返回值:
     已在 System.Data.DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。  
      

  8.   

    请问楼上大哥
    在使用的时候
    SqlDataAdapter 会从数据库中将所有记录取出吗?
    我主要是关心这个问题
      

  9.   

    fill方法有一个重载函数
    其原形是:fill(System.Data.DataSet dataSet, int startRecord, int maxRecords, string srcTable)
    第一个参数:要填充的数据集
    第二个参数:要查找的开始记录编号(即从第几条记录开始)
    第三个参数:每页的记录个数
    第四个参数:表名
    例如:startRecord = (curPage - 1) * pageSize,其中curPage是当前页数、pageSize是每页的记录个数,每次刷新页面通过改变startRecord参数来达到分页的目的。
      

  10.   

    wwzonly() 大哥
    这个方法我用过
    我只是想请问它的效率如何?
      

  11.   

    fill方法只是从数据库读取相应的记录不过再读取之前的消耗的就多了,比如排序,还要找第几条记录等等
      

  12.   

    SqlDataAdapter 会从数据库中将所有记录取出吗?
    ====================
    这得看你Fill的SQL语句
      

  13.   

    分页通常都是在存储过程里做的,读出全部记录后再分的是效率很差的。
    http://blog.csdn.net/banmuhuangci 
    请看最新的那篇文章