将以前写的SQL 2分查找法 通用分页存储过程算法 改成.net类实现

 

using  System;

namespace  CountryPark.DAL
{
    
/**/ ///   <summary>
    
///  PageList 的摘要说明。
    
///   </summary>
     public   sealed   class  PageList
    {
        
static  PageList()
        {
        }
        
        
/**/ ///   <summary>
        
///  分页查询数据记录总数获取
        
///   </summary>
        
///   <param name="_tbName"> ----要显示的表或多个表的连接 </param>
        
///   <param name="_ID"> ----主表的主键 </param>
        
///   <param name="_strCondition"> ----查询条件,不需where </param>         
        
///   <param name="_Dist"> ----是否添加查询字段的 DISTINCT 默认0不添加/1添加 </param>
        
///   <returns></returns>
         public   static   string  getPageListCounts( string  _tbName,  string  _ID,  string  _strCondition,  int  _Dist)
        {            
            
// ---存放取得查询结果总数的查询语句                    
            
// ---对含有DISTINCT的查询进行SQL构造
            
// ---对含有DISTINCT的总数查询进行SQL构造
             string  strTmp = "" , SqlSelect = "" , SqlCounts = "" ;
            
            
if  (_Dist  ==   0 )
            {
                SqlSelect 
=   " SELECT  " ;
                SqlCounts 
=   " COUNT(*) " ;
            }
            
else
            {
                SqlSelect 
=   " SELECT DISTINCT  " ;
                SqlCounts 
=   " COUNT(DISTINCT  " +  _ID  + " ) " ;
            }
            
if  (_strCondition  ==   string .Empty)
            {
                strTmp 
=  SqlSelect  + "  @Counts= " +  SqlCounts  + "  FROM  " +  _tbName;
            }
            
else
            {
                strTmp 
=  SqlSelect  + "  @Counts= " +  SqlCounts  + "  FROM  " +   "  WHERE (1=1)  " +  _strCondition; 
            }
            
return  strTmp;
        }


        
/**/ ///   <summary>
        
///  获取分页数据查询SQL
        
///   </summary>
        
///   <param name="_tbName"> ----要显示的表或多个表的连接 </param>
        
///   <param name="_fldName"> ----要显示的字段列表 </param>
        
///   <param name="_PageSize"> ----每页显示的记录个数 </param>
        
///   <param name="_Page"> ----要显示那一页的记录 </param>
        
///   <param name="_PageCount"> ----查询结果分页后的总页数 </param>
        
///   <param name="_Counts"> ----查询到的记录数 </param>
        
///   <param name="_fldSort"> ----排序字段列表或条件(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ') </param>
        
///   <param name="_Sort"> ----排序方法,0为升序,1为降序 </param>
        
///   <param name="_strCondition"> ----查询条件,不需where </param>
        
///   <param name="_ID"> ----主表的主键 </param>
        
///   <param name="_Dist"> ----是否添加查询字段的 DISTINCT 默认0不添加/1添加 </param>
        
///   <returns></returns>                                                                            
         public   static   string  getPageListSql( string  _tbName,  string  _fldName,  int  _PageSize,  int  _Page,  out   int  _PageCount,  int  _Counts,  string  _fldSort,  int  _Sort,  string  _strCondition,  string  _ID,  int  _Dist)
        {                
            
string  strTmp = "" // ---strTmp用于返回的SQL语句
             string  SqlSelect = "" , strSortType = "" , strFSortType = "" ;   

            
if  (_Dist  ==   0 )
            {
                SqlSelect 
=   " SELECT  " ;            
            }
            
else
            {
                SqlSelect 
=   " SELECT DISTINCT  " ;                
            }

            
if  (_Sort  ==   0 )
            {
                strFSortType 
=   "  ASC " ;
                strSortType 
=   "  DESC " ;
            }
            
else
            {
                strFSortType 
=   "  DESC " ;
                strSortType 
=   "  ASC " ;
            }

//             ----取得查询结果总数量-----
             int  tmpCounts  =   1 ;
            
if  (_Counts  !=   0 )
            {
                tmpCounts 
=  _Counts;
            }
//           --取得分页总数
            _PageCount  =  (tmpCounts  +  _PageSize  -   1 ) / _PageSize;
            
//     /** // **当前页大于总页数 取最后一页**/
             if  (_Page  >  _PageCount)
            {
                _Page 
=  _PageCount; 
            }
            
if  (_Page  <=   0 )
            {
                _Page 
=   1 ;
            }
//           --/*-----数据分页2分处理-------*/
             int  pageIndex  =  tmpCounts / _PageSize;
            
int  lastCount  =  tmpCounts % _PageSize;
            
if  (lastCount  >   0 )
            {
                pageIndex 
=  pageIndex  +   1 ;
            }
            
else
            {
                lastCount 
=  _PageSize;
            }
            
if  (_strCondition  ==   string .Empty)  //  --没有设置显示条件
            {
                
if  (pageIndex  <   2   ||  _Page  <=  (pageIndex / 2   +  pageIndex % 2 ))   // --前半部分数据处理
                {
                    
if  (_Page  ==   1 )
                    {
                        strTmp 
=  SqlSelect  + "  TOP  " +  _PageSize  + "   " +  _fldName  + "  FROM  " +  _tbName  + "  ORDER BY  " +  _fldSort  + "   " +  strFSortType;
                    }
                    
else
                    {
                        strTmp 
=  SqlSelect  + "  TOP  " +  _PageSize  + "   " +  _fldName  + "  FROM  " +  _tbName  + "  WHERE  " +  _ID  + "  <(SELECT MIN( " +  _ID  + " ) FROM ( " +  SqlSelect  + "  TOP  " +  _PageSize * (_Page - 1 + "   " +  _ID  + "  FROM  " +  _tbName  +
                            
"  ORDER BY  " +  _fldSort  + "   " +  strFSortType  + " ) AS TBMinID) ORDER BY  " +  _fldSort  + "   " +  strFSortType;
                    }
                }
                
else
                {
                    _Page 
=  pageIndex  -  _Page  +   1 // 后半部分数据处理
                     if  (_Page  <=   1 // --最后一页数据显示
                    {
                        strTmp 
=  SqlSelect  + "  * FROM ( " +  SqlSelect  + "  TOP  " +  lastCount  + "   " +  _fldName  + "  FROM  " +  _tbName  + "  ORDER BY  " +  _fldSort  + "   " +  strSortType  + " ) AS TempTB " +   "  ORDER BY  " +  _fldSort  + "   " +  strFSortType;
                    }
                    
else
                    {
                        strTmp 
=  SqlSelect  + "  * FROM ( " +  SqlSelect  + "  TOP  " +  _PageSize  + "   " +  _fldName  + "  FROM  " +  _tbName  +
                            
"  WHERE  " +  _ID  + "  >(SELECT MAX( " +  _ID  + " ) FROM( " +  SqlSelect  + "  TOP  " +  (_PageSize * (_Page - 2 ) + lastCount)  + "   " +  _ID  + "  FROM  " +  _tbName  +
                            
"  ORDER BY  " +  _fldSort  + "   " +  strSortType  + " ) AS TBMaxID) ORDER BY  " +  _fldSort  + "   " +  strSortType  + " ) AS TempTB ORDER BY  " +  _fldSort  + "   " +  strFSortType;
                    }
                }
            }
            
else   //  --有查询条件
            {
                
if  (pageIndex  <   2   ||  _Page  <= (pageIndex / 2   +  pageIndex % 2 )) // --前半部分数据处理
                {
                    
if  (_Page  ==   1 )
                    {
                        strTmp 
=  SqlSelect  + "  TOP  " +  _PageSize  + "   " +  _fldName  + "  FROM  " +  _tbName  + " WHERE 1=1  " +  _strCondition  + "  ORDER BY  " +  _fldSort  + "   " +  strFSortType;
                    }
                    
else
                    {
                        strTmp 
=  SqlSelect  + "  TOP  " +  _PageSize  + "   " +  _fldName  + "  FROM  " +  _tbName  +
                            
"  WHERE  " +  _ID  + "  <(SELECT MIN( " +  _ID  + " ) FROM ( " +  SqlSelect  + "  TOP  " +  (_PageSize * (_Page - 1 ))  + "   " +  _ID  + "  FROM  "   + _tbName  +
                            
"  WHERE 1=1  " +  _strCondition  + "  ORDER BY  " +  _fldSort  + "   " +  strFSortType  + " ) AS TBMaxID)  " +  _strCondition  +
                            
"  ORDER BY  " +  _fldSort  + "   " +  strFSortType;                            
                    }
                }
                
else   // --后半部分数据处理
                {
                    _Page 
=  pageIndex - _Page + 1 ;
                    
if  (_Page  <=   1 // --最后一页数据显示
                    {
                        strTmp 
=  SqlSelect  + "  * FROM ( " +  SqlSelect  + "  TOP  " +  lastCount  + "   " +  _fldName  + "  FROM  " +  _tbName  +
                            
"  WHERE 1=1  " +  _strCondition  + "  ORDER BY  " +  _fldSort  + "   " +  strSortType  + " ) AS TempTB ORDER BY  " +  _fldSort  + "   " +  strFSortType;
                    }
                    
else
                    {   
                        strTmp 
=  SqlSelect  + "  * FROM ( " +  SqlSelect  + "  TOP  " +  _PageSize  + "   " +  _fldName  + "  FROM  " +  _tbName  +
                            
"  WHERE  " +  _ID  + "  >(SELECT MAX( " +  _ID  + " ) FROM( " +  SqlSelect  + "  TOP  " +  (_PageSize * (_Page - 2 ) +  lastCount)  + "   " +  _ID  + "  FROM  " +  _tbName  +
                            
"  WHERE 1=1  " +  _strCondition  + "  ORDER BY  " +  _fldSort  + "   " +  strSortType  + " ) AS TBMaxID)  " +  _strCondition  +
                            
"  ORDER BY  " +  _fldSort  + "   " +  strSortType  + " ) AS TempTB ORDER BY  " +  _fldSort  + "   " +  strFSortType;
                    }
                }
            }

            
return  strTmp;
        }
    }
}
//-- 以上代码是针对之前写的TOP MAX模式的分页存储过程修改
//-- 以上分页算法对SQL SERVER 和 ACCESS同样有效
 
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值