
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, 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同样有效
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。