加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

通用分页存储过程算法【.net类实现】

发布时间:2020-12-12 15:54:03 所属栏目:MsSql教程 来源:网络整理
导读:? using ?System; namespace ?CountryPark.DAL ... { ???? /**/ /**/ /**/ /// ? summary ???? /// ?PageList?的摘要说明。 ???? /// ? /summary ???? public ? sealed ? class ?PageList ???? ... { ???????? static ?PageList() ???????? ... { ????????}

?

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读