当前位置:编程学习 > C#/ASP.NET >>

怎样调用存储过程为gridview分页?代码怎样写

怎样调用存储过程为gridview分页?代码怎样写 --------------------编程问答-------------------- 先写存储过程,
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
--------------------编程问答-------------------- 程序里面调用 
  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");
                   } --------------------编程问答-------------------- 分页,我一般是用吴旗娃控件 --------------------编程问答-------------------- 楼上的方法就是了... --------------------编程问答-------------------- 在CSDN上搜索下分页,或出N个解决方案给看。 --------------------编程问答-------------------- 嗯,网上很多。找找吧 --------------------编程问答-------------------- 1 --------------------编程问答-------------------- 恩网上有很多的存储过程分页! --------------------编程问答-------------------- 中国.NET学习群(新41308531) --------------------编程问答-------------------- 2楼的已经很全了 --------------------编程问答-------------------- 帮顶! --------------------编程问答-------------------- good --------------------编程问答-------------------- set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go



ALTER 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的分页检索啊?求解,先在这谢谢了!。。(邮箱:860945970@qq.com)


--------------------编程问答-------------------- 我了個去!2007的坟都挖出来了
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,