分页存储过程

大神都是从菜鸟开始的,所以菜鸟的学习很重要!
自己写的一个很好用很实际的例子,可以直接使用
1.创建sql的存储过程

 
CREATE PROCEDURE Page
@iPage int=1, --当前页码
@iPageSize int=10,--每页条数
@StrTable varchar(4000),--查询的表
@StrText varchar(1000),--查询的字段
@StrWhere varchar(1000),--条件
@StrIndex varchar(30),--索引
@StrOrder varchar(100),--排序字段
@StrTotals int output --返回总条数
 AS

--定义变量
declare @SQLCount nvarchar(4000)
declare @Sql nvarchar(4000)
declare @TempOrder nvarchar(4000)

if @StrOrder<>''
    begin
        set @TempOrder='  order by '+@StrOrder
    end
else
    begin
        set @TempOrder=''
    end

--组合sql语句
if @iPage=1
    begin
        set @Sql='select top '+str(@iPageSize)+' '+@StrText+' from '+@StrTable+'  where 1=1 '+@StrWhere+@TempOrder
    end
else
    begin
        set @Sql='select top '+str(@iPageSize)+' '+@StrText+' from '+@StrTable+' where '+@StrIndex+' not in (select top '+str(@iPageSize*(@iPage-1))+' '+@StrIndex+' from '+@StrTable+' where 1=1 '+@StrWhere+@TempOrder+') '+@StrWhere+@TempOrder
    end

set   @SqlCount='select   @StrTotals=isnull(count(*),10000)   from '+@StrTable+'  where 1=1 '+@StrWhere

--查询总记录数量
exec   sp_executesql   @SqlCount,N'@StrTotals  int   output',@StrTotals   output

--执行sql语句返回
exec (@Sql)

 2.访问层调用


    public static DataTable Getlist(int PageSize, int CurrentPage, string strWhere, out int Record, string biao, string strdesc,string zd ,string zkey)
    {
        DataTable Dt = new DataTable();
        SqlParameter[] prams ={new SqlParameter("@StrTable",SqlDbType.VarChar,4000),//表名
                               new SqlParameter("@StrIndex",SqlDbType.VarChar,100),//主键
                               new SqlParameter("@StrText",SqlDbType.VarChar,350),//字段
                               new SqlParameter("@iPageSize",SqlDbType.Int),//每页记录数
                               new SqlParameter("@iPage",SqlDbType.Int),//当前页
                               new SqlParameter("@StrWhere",SqlDbType.VarChar,1000),//查询条件
                               new SqlParameter("@StrOrder",SqlDbType.VarChar,200),//排序字
                               new SqlParameter("@StrTotals",SqlDbType.Int) };

        prams[0].Value = biao;
        prams[1].Value = zkey;// "id";
        prams[2].Value = zd;//"*";
        prams[3].Value = PageSize;
        prams[4].Value = CurrentPage;
        prams[5].Value = strWhere;
        prams[6].Value = strdesc;
        prams[7].Direction = ParameterDirection.Output;
        Dt = DBa.ExecuteDataTable("Page", prams, CommandType.StoredProcedure);
        Record = Convert.ToInt32(prams[7].Value);
        return Dt;

    }


 

posted @ 2013-04-15 15:00  CaiNiaoYY  阅读(87)  评论(0)    收藏  举报