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