分享
 
 
 

DataGrid连接Access的快速分页法(4)——动态生成SQL语句

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

DataGrid连接Access的快速分页法(4)——动态生成SQL语句

using System;

using System.Text;

namespace Paging

{

/// <summary>

/// FastPaging 的摘要说明。

/// </summary>

public class FastPaging {

private FastPaging() {

}

/// <summary>

/// 获取根据指定字段排序并分页查询的 SELECT 语句。

/// </summary>

/// <param name="pageSize">每页要显示的记录的数目。</param>

/// <param name="pageIndex">要显示的页的索引。</param>

/// <param name="recordCount">数据表中的记录总数。</param>

/// <param name="tableName">要查询的数据表。</param>

/// <param name="queryFields">要查询的字段。</param>

/// <param name="primaryKey">主键字段。</param>

/// <param name="ascending">是否为升序排列。</param>

/// <param name="condition">查询的筛选条件。</param>

/// <returns>返回排序并分页查询的 SELECT 语句。</returns>

public static String Paging(

int pageSize,

int pageIndex,

int recordCount,

String tableName,

String queryFields,

String primaryKey,

bool ascending,

String condition )

{

#region 实现

StringBuilder sb = new StringBuilder();

int pageCount = GetPageCount(recordCount,pageSize); //分页的总数

int middleIndex = GetMidPageIndex(pageCount); //中间页的索引

int firstIndex = 0; //第一页的索引

int lastIndex = pageCount - 1; //最后一页的索引

#region @PageIndex <= @FirstIndex

if (pageIndex <= firstIndex) {

sb.Append("SELECT TOP ").Append(pageSize).Append(" ").Append(queryFields)

.Append(" FROM ").Append(tableName);

if (condition != String.Empty)

sb.Append(" WHERE ").Append(condition);

sb.Append(" ORDER BY ").Append(primaryKey).Append(" ")

.Append(GetSortType(ascending));

}

#endregion

#region @FirstIndex < @PageIndex <= @MiddleIndex

else if (pageIndex > firstIndex && pageIndex <= middleIndex) {

sb.Append("SELECT TOP ").Append(pageSize).Append(" ").Append(queryFields)

.Append(" FROM ").Append(tableName)

.Append(" WHERE ").Append(primaryKey);

if (ascending)

sb.Append(" > (").Append(" SELECT MAX(");

else

sb.Append(" < (").Append(" SELECT MIN(");

sb.Append(primaryKey).Append(") FROM ( SELECT TOP ")

.Append(pageSize*pageIndex).Append(" ").Append(primaryKey)

.Append(" FROM ").Append(tableName);

if (condition != String.Empty)

sb.Append(" WHERE ").Append(condition);

sb.Append(" ORDER BY ").Append(primaryKey).Append(" ")

.Append(GetSortType(ascending))

.Append(" ) TableA )");

if (condition != String.Empty)

sb.Append(" AND ").Append(condition);

sb.Append(" ORDER BY ").Append(primaryKey).Append(" ")

.Append(GetSortType(ascending));

}

#endregion

#region @MiddleIndex < @PageIndex < @LastIndex

else if (pageIndex > middleIndex && pageIndex < lastIndex) {

sb.Append("SELECT * FROM ( SELECT TOP ")

.Append(pageSize).Append(" ").Append(queryFields)

.Append(" FROM ").Append(tableName)

.Append(" WHERE ").Append(primaryKey);

if (ascending)

sb.Append(" < (").Append(" SELECT MIN(");

else

sb.Append(" > (").Append(" SELECT MAX(");

sb.Append(primaryKey).Append(") FROM ( SELECT TOP ")

.Append(recordCount-pageSize*(pageIndex+1)).Append(" ").Append(primaryKey)

.Append(" FROM ").Append(tableName);

if (condition != String.Empty)

sb.Append(" WHERE ").Append(condition);

sb.Append(" ORDER BY ").Append(primaryKey).Append(" ")

.Append(GetSortType(!ascending))

.Append(" ) TableA )");

if (condition != String.Empty)

sb.Append(" AND ").Append(condition);

sb.Append(" ORDER BY ").Append(primaryKey).Append(" ")

.Append(GetSortType(!ascending))

.Append(" ) TableB ORDER BY ").Append(primaryKey).Append(" ")

.Append(GetSortType(ascending));

}

#endregion

#region @PageIndex >= @LastIndex

else if (pageIndex >= lastIndex) {

sb.Append("SELECT * FROM ( SELECT TOP ").Append(recordCount-pageSize*lastIndex)

.Append(" ").Append(queryFields)

.Append(" FROM ").Append(tableName);

if (condition != String.Empty)

sb.Append(" WHERE ").Append(condition);

sb.Append(" ORDER BY ").Append(primaryKey).Append(" ")

.Append(GetSortType(!ascending))

.Append(" ) TableA ORDER BY ").Append(primaryKey).Append(" ")

.Append(GetSortType(ascending));

}

#endregion

return sb.ToString();

#endregion

}

/// <summary>

/// 获取根据指定字段排序并分页查询的 SELECT 语句。

/// </summary>

/// <param name="pageSize">每页要显示的记录的数目。</param>

/// <param name="pageIndex">要显示的页的索引。</param>

/// <param name="recordCount">数据表中的记录总数。</param>

/// <param name="tableName">要查询的数据表。</param>

/// <param name="queryFields">要查询的字段。</param>

/// <param name="primaryKey">主键字段。</param>

public static String Paging(

int pageSize,

int pageIndex,

int recordCount,

String tableName,

String queryFields,

String primaryKey )

{

return Paging(pageSize, pageIndex, recordCount, tableName, queryFields, primaryKey,

true, String.Empty);

}

/// <summary>

/// 获取根据指定字段排序并分页查询的 SELECT 语句。

/// </summary>

/// <param name="pageSize">每页要显示的记录的数目。</param>

/// <param name="pageIndex">要显示的页的索引。</param>

/// <param name="recordCount">数据表中的记录总数。</param>

/// <param name="tableName">要查询的数据表。</param>

/// <param name="queryFields">要查询的字段。</param>

/// <param name="primaryKey">主键字段。</param>

/// <param name="ascending">是否为升序排列。</param>

/// <returns>返回排序并分页查询的 SELECT 语句。</returns>

public static String Paging(

int pageSize,

int pageIndex,

int recordCount,

String tableName,

String queryFields,

String primaryKey,

bool ascending )

{

return Paging(pageSize, pageIndex, recordCount, tableName, queryFields, primaryKey,

ascending, String.Empty);

}

/// <summary>

/// 获取根据指定字段排序并分页查询的 SELECT 语句。

/// </summary>

/// <param name="pageSize">每页要显示的记录的数目。</param>

/// <param name="pageIndex">要显示的页的索引。</param>

/// <param name="recordCount">数据表中的记录总数。</param>

/// <param name="tableName">要查询的数据表。</param>

/// <param name="queryFields">要查询的字段。</param>

/// <param name="primaryKey">主键字段。</param>

/// <param name="condition">查询的筛选条件。</param>

/// <returns>返回排序并分页查询的 SELECT 语句。</returns>

public static String Paging(

int pageSize,

int pageIndex,

int recordCount,

String tableName,

String queryFields,

String primaryKey,

String condition )

{

return Paging(pageSize, pageIndex, recordCount, tableName, queryFields, primaryKey,

true, condition);

}

/// <summary>

/// 计算分页数。

/// </summary>

/// <param name="recordCount">表中得记录总数。</param>

/// <param name="pageSize">每页显示的记录数。</param>

/// <returns>分页数。</returns>

public static int GetPageCount(int recordCount, int pageSize)

{

return (int)Math.Ceiling((double)recordCount/pageSize);

}

/// <summary>

/// 计算中间页的页索引。

/// </summary>

/// <param name="pageCount">分页数。</param>

/// <returns>中间页的页索引。</returns>

public static int GetMidPageIndex(int pageCount)

{

return (int)Math.Ceiling((double)pageCount/2) - 1;

}

/// <summary>

/// 获取排序的方式("ASC" 表示升序,"DESC" 表示降序)。

/// </summary>

/// <param name="ascending">是否为升序。</param>

/// <returns>排序的方式("ASC" 表示升序,"DESC" 表示降序)。</returns>

public static String GetSortType(bool ascending)

{

return (ascending ? "ASC" : "DESC");

}

/// <summary>

/// 获取一个布尔值,该值指示排序的方式是否为升序。

/// </summary>

/// <param name="orderType">排序的方式("ASC" 表示升序,"DESC" 表示降序)。</param>

/// <returns>"ASC"则为 true;"DESC"则为 false;其它的为 true。</returns>

public static bool IsAscending(String orderType)

{

return ((orderType.ToUpper() == "DESC") ? false : true);

}

}

}

作者:黎波

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有