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

    技术2022-05-11  67

     

    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)