先写存储过程,
CREATE PROCEDURE pagination @tblName varchar(255), -- 表名 @strGetFields varchar(1000) = '*', -- 需要返回的列 @fldName varchar(255)='', -- 排序的字段名 @PageSize int = 10, -- 页尺寸 @PageIndex int = 1, -- 页码 @doCount bit = 0, -- 返回记录总数, 非 0 值则返回 @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 @strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where) AS declare @strSQL varchar(5000) -- 主语句 declare @strTmp varchar(110) -- 临时变量 declare @strOrder varchar(400) -- 排序类型 if @doCount != 0 begin if @strWhere !='' set @strSQL = 'select count(*) as Total from ' + @tblName + ' where '+@strWhere else set @strSQL = 'select count(*) as Total from ' + @tblName + '' end --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况 else begin if @OrderType != 0 begin set @strTmp = '<(select min' set @strOrder = ' order by ' + @fldName +' desc' --如果@OrderType不是0,就执行降序,这句很重要! end else begin set @strTmp = '>(select max' set @strOrder = ' order by ' + @fldName +' asc' end if @PageIndex = 1 begin if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder else set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder --如果是第一页就执行以上代码,这样会加快执行速度 end else begin --以下代码赋予了@strSQL以真正执行的SQL代码 set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @fldName + '' + @strTmp + '('+ @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where [' + @fldName + '' + @strTmp + '(' + @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' ' + @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder end end exec (@strSQL) GO

解决方案 »

  1.   

    程序里面调用 
      public DataSet GetList(int PageSize, int PageIndex, string strWhere)
            {
                IDataParameter[] parameters = new IDataParameter[]{
                                                new SqlParameter("@tblName", SqlDbType.VarChar, 255),
                                                new SqlParameter("@strGetFields", SqlDbType.VarChar, 255),
                                                new SqlParameter("@fldName", SqlDbType.VarChar, 255),
                                                new SqlParameter("@PageSize", SqlDbType.Int),
                                                new SqlParameter("@PageIndex", SqlDbType.Int),
                                                new SqlParameter("@doCount", SqlDbType.Bit),
                                                new SqlParameter("@OrderType", SqlDbType.Bit),
                                                new SqlParameter("@strWhere", SqlDbType.VarChar,1000)
                };
                parameters[0].Value = "CangKuStock CKS ";
                parameters[1].Value = " CKS.CangKuId,CKS.ProductID,CKS.Quantity,CKS.TradeTime,CKS.Man";
                parameters[2].Value = "TradeTime";
                parameters[3].Value = PageSize;
                parameters[4].Value = PageIndex;
                parameters[5].Value = 0;
                parameters[6].Value = 1;
                parameters[7].Value = strWhere;
                return DbHelperSQL.RunProcedure("pagination", parameters, "dtStock");
                       }
      

  2.   

    在CSDN上搜索下分页,或出N个解决方案给看。
      

  3.   

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER procedure [dbo].[proc_GetDataInfo] 

    @Tables     varchar(1000), --表名如testtable 
    @PrimaryKey     varchar(100),--表的主键,必须唯一性 
    @Sort     varchar(200)     =     NULL,--排序字段如f_Name asc或f_name desc(注意只能有一个排序字段) 
    @CurrentPage     int     =     1,--当前页 
    @PageSize     int     =     10,---每页大小 
    @Fields     varchar(1000)     =     '*',--显示的字段列表 
    @Filter     varchar(1000)     =     NULL,--条件语句,不加where,如 f_id>3 
    @Group     varchar(1000)     =     NULL,--分组字段 
    @TotalPage int     output --返回总页数 
    ) /*WITH ENCRYPTION ---加密存储 */AS 
         SET NOCOUNT ON 
         Declare @intResult Int          Begin Tran      DECLARE @sql nvarchar(4000) 
         
         if @Filter is null or @Filter=''   
             set @Sql = 'select @intResult = count(' + @PrimaryKey + ') from ' +   @Tables 
             else 
             set @Sql = 'select @intResult = count(' + @PrimaryKey + ') from ' +   @Tables + ' where + ' + @Filter          EXEC sp_executesql @sql,N'@intResult int OUTPUT',@intResult OUTPUT--计算总记录数 
         select @TotalPage=CEILING((@intResult+0.0)/@PageSize)--计算总页数 
         
         
         IF     @Sort     IS     NULL     or     @Sort     =     '' 
         SET     @Sort     =     @PrimaryKey      DECLARE     @SortTable     varchar(100) 
         DECLARE     @SortName     varchar(100) 
         DECLARE     @strSortColumn     varchar(200) 
         DECLARE     @operator     char(2) 
         DECLARE     @type     varchar(100) 
         DECLARE     @prec     int 
         
         IF     CHARINDEX('DESC',@Sort)>0 
           BEGIN 
             SET     @strSortColumn     =     REPLACE(@Sort,     'DESC',     '') 
             SET     @operator     =     '<=' 
           END 
         ELSE 
               IF     CHARINDEX('ASC',     @Sort)     >     0 
                 BEGIN   
                   SET     @strSortColumn     =     REPLACE(@Sort,     'ASC',     '') 
                   SET     @operator     =     '>=' 
                 END 
             
             ELSE     
                 BEGIN 
                 SET     @strSortColumn   = @SORT 
                 SET     @operator     =     '>=' 
                 END 
         
         IF     CHARINDEX('.',     @strSortColumn)     >     0 
             BEGIN 
               SET     @SortTable     =     SUBSTRING(@strSortColumn,     0,     CHARINDEX('.',@strSortColumn)) 
               SET     @SortName     =     SUBSTRING(@strSortColumn,     CHARINDEX('.',@strSortColumn)     +     1,     LEN(@strSortColumn)) 
             END 
         ELSE 
             BEGIN 
               SET     @SortTable     =     @Tables 
               SET     @SortName     =     @strSortColumn 
             END 
         
         Select     @type=t.name,     @prec=c.prec 
         FROM     sysobjects     o   
         JOIN     syscolumns     c     on     o.id=c.id 
         JOIN     systypes     t     on     c.xusertype=t.xusertype 
         Where     o.name     =     @SortTable     AND     c.name     =     @SortName 
         
         IF     CHARINDEX('char',     @type)     >     0 
               SET     @type     =     @type     +     '('     +     CAST(@prec     AS     varchar)     +     ')' 
         
         DECLARE     @strPageSize     varchar(50) 
         DECLARE     @strStartRow     varchar(50) 
         DECLARE     @strFilter     varchar(1000) 
         DECLARE     @strSimpleFilter     varchar(1000) 
         DECLARE     @strGroup     varchar(1000) 
         
         IF     @CurrentPage     <     1 
         SET     @CurrentPage     =     1 
         
         SET     @strPageSize     =     CAST(@PageSize     AS     varchar(50)) 
         SET     @strStartRow     =     CAST(((@CurrentPage     -     1)*@PageSize     +     1)     AS     varchar(50)) 
         
         IF     @Filter     IS     NOT     NULL     AND     @Filter     !=     '' 
           BEGIN 
             SET     @strFilter     =     '     Where     '     +     @Filter     +     '     ' 
             SET     @strSimpleFilter     =     '     AND     '     +     @Filter     +     '     ' 
           END 
         ELSE 
           BEGIN 
             SET     @strSimpleFilter     =     '' 
             SET     @strFilter     =     '' 
           END 
         
         IF     @Group     IS     NOT     NULL     AND     @Group     !=     '' 
           SET     @strGroup     =     '     GROUP     BY     '     +     @Group     +     '     ' 
         ELSE 
           SET     @strGroup     =     '' 
         
         set @sql = 'DECLARE     @SortColumn     '     +     @type     +     ' 
         SET     ROWCOUNT     '     +     @strStartRow     +     ' 
         Select     @SortColumn='     +     @strSortColumn     +     '     FROM     '     +     @Tables     +     @strFilter     +     '     '     +     @strGroup     +     '     orDER     BY     '     +     @Sort     +     ' 
         SET     ROWCOUNT     '     +     @strPageSize     +     ' 
         Select     '     +     @Fields     +     '     FROM     '     +     @Tables     +     '     Where     '     +     @strSortColumn     +     @operator     +     '     @SortColumn     '     +     @strSimpleFilter     +     '     '     +     @strGroup     +     '     orDER     BY     '     +     @Sort     +     ' 
         ' 
         
         exec(@sql) 
         --print @sql -------------------------------------------------------------------------------------------------      If @@Error <> 0 
             Begin 
                 RollBack Tran
                 Return -1 
             End 
         Else 
             Begin 
                 Commit Tran 
                 Return @intResult ---返回记录总数 
             End 
    我怎么在asp.net应用程序中调用这个分页存储过程来现实gridview的分页检索啊?求解,先在这谢谢了!。。(邮箱:[email protected]