• 修正过的通用分页存储过程


    http://www.cnblogs.com/maiqi/archive/2006/05/04/391349.html
    修改了一下源码和存储过程,可同时返回分页所需数据的同时,返回所有数据的个数.
     ------------------------------------
     
    --用途:分页存储过程(对有主键的表效率极高)  
     
    --说明:
     
    ------------------------------------
     
     ALTER PROCEDURE UP_GetRecordByPage
         @tblName      varchar(
    255),       -- 表名
         @fldName      varchar(
    255),       -- 主键字段名
         @PageSize     
    int = 10,           -- 页尺寸
        @PageIndex    
    int = 1,            -- 页码
        @RowCount    
    int output,            -- 返回记录总数
        @OrderType    bit 
    = 0,            -- 设置排序类型, 非 0 值则降序
        @strWhere     varchar(
    1000= ''  -- 查询条件 (注意: 不要加 where)
    AS

    declare @strSQL   varchar(
    6000)       -- 主语句
    declare @strTmp   varchar(
    100)        -- 临时变量
    declare @strOrder varchar(
    400)        -- 排序类型

    if @OrderType != 0
    begin
        
    set @strTmp = '<(select min'
        
    set @strOrder = ' order by [' + @fldName +'] desc'
    end
    else
    begin
        
    set @strTmp = '>(select max'
        
    set @strOrder = ' order by [' + @fldName +'] asc'
    end

    set @strSQL = 'select top ' + str(@PageSize) + ' * 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) + ' * from ['
            
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
            
    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
            
    + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
            
    + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

    if @PageIndex = 1
    begin
        
    set @strTmp =''
        
    if @strWhere != ''
            
    set @strTmp = ' where ' + @strWhere

        
    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
            
    + @tblName + ']' + @strTmp + ' ' + @strOrder
    end


    declare @sql NVARCHAR(
    400)
    set @sql = N'select @RowCount=count(*) from '+@tblName+' where '+ @strWhere
    EXEC sp_executesql @sql,N
    '@RowCount int OUT',@RowCount OUT  

    exec (@strSQL)


    数据层也相应的做了些修改:

    /// <summary>
              
    /// 分页获取数据列表
              
    /// </summary>

              public DataSet GetList(int PageSize,int PageIndex,string strWhere,ref int Output)
              
    {
                  SqlParameter[] parameters 
    = {
                          
    new SqlParameter("@tblName", SqlDbType.VarChar, 255),
                          
    new SqlParameter("@fldName", SqlDbType.VarChar, 255),
                          
    new SqlParameter("@PageSize", SqlDbType.Int),
                         
    new SqlParameter("@PageIndex", SqlDbType.Int),
                         
    new SqlParameter("@RowCount", SqlDbType.Int),
                         
    new SqlParameter("@OrderType", SqlDbType.Bit),
                         
    new SqlParameter("@strWhere", SqlDbType.VarChar,1000),
                         }
    ;
                 parameters[
    0].Value = "TM_TeachInfo";
                 parameters[
    1].Value = "InfoID";
                 parameters[
    2].Value = PageSize;
                 parameters[
    3].Value = PageIndex;
                 parameters[
    4].Direction = System.Data.ParameterDirection.Output;
                 parameters[
    5].Value = 1;
                 parameters[
    6].Value = strWhere;
     
                 DataSet ds 
    = DbHelperSQL.RunProcedure("UP_GetRecordByPage",parameters,"ds");
     
                 
    if (parameters[4].Value != DBNull.Value  && parameters[4].Value.ToString() != string.Empty)
                 
    {
                     Output
    =Convert.ToInt32(parameters[4].Value);
                 }

     
                 
    return ds;
             }

  • 相关阅读:
    1133catalan数二维变种
    HDU2254 奥运 矩阵应用
    hdu1134大数+catalan数
    C#编写一个控制台应用程序,输入三角形或者长方形边长,计算其周长和面积并输出。
    简单工厂
    每日总结
    C#编写一个控制台应用程序,可根据输入的月份判断所在季节
    使用Java api对HBase 2.4.5进行增删改查
    C#编写程序,用 while 循环语句实现下列功能:有一篮鸡蛋,不止一个,有人两个两 个数,多余一个,三个三个数,多余一个,再四个四个地数,也多余一个,请问这篮鸡蛋至 少有多少个
    每日总结
  • 原文地址:https://www.cnblogs.com/xlfj521/p/914768.html
Copyright © 2020-2023  润新知