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同样有效