当前位置: 首页 > 编程日记 > 正文

DataGrid连接Access的快速分页法——动态生成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);
}
}
}

相关文章:

一文读懂机器学习“数据中毒”

作者 | Ben Dickson翻译 | 火火酱~出品 | AI科技大本营头图 | 付费下载于视觉中国在人类的眼中&#xff0c;下面的三张图片分别展示了三样不同的东西&#xff1a;一只鸟、一只狗和一匹马。但对于机器学习算法来说&#xff0c;这三者或许表示同样的东西:一个有黑边的白色小方框。…

chartee

2019独角兽企业重金招聘Python工程师标准>>> 一个绘制图表的类库&#xff0c;支持绘制股票的K线图&#xff0c;还可以绘制曲线、柱状图等等。 Code4App编译测试&#xff0c;测试环境&#xff1a;Xcode 4.3, iOS 5.0。 转载:http://www.adobex.com/ios/source/detail…

C语言存储类关键字

1、static这个关键字有三种用法&#xff1a;&#xff08;1&#xff09;第一种是用来修饰局部变量&#xff0c;使之成为静态局部变量&#xff1b;静态局部变量存储在数据段/bss段中&#xff0c;作用域是代码块作用域&#xff0c;生命周期是程序生命周期&#xff0c;链接属性是无…

显示DataGrid序号的一个适用的方法

作者Blog&#xff1a;http://blog.csdn.net/wangj2001/如果数据量小的话没有问题&#xff0c;一旦数据量大&#xff0c;显示特别慢&#xff0c;还有个缺点就是拖动行高时行号不随行高的变化而变动&#xff0c;出现是几个序号在一个单元格中显示。我自己对他们的算法进行总结&am…

Integer的自动缓存

2019独角兽企业重金招聘Python工程师标准>>> Interger装箱有个自动缓存的概念 Integer a 100;Integer b 100;Integer c 200;Integer d 200;System.out.println(a b); //trueSystem.out.println(c d); //false Integer是对象&#xff0c;比较的是对象在内存中…

崩溃!双十一第 4 天,某互联网公司黄了?

01打折这么狠是不是要黄了&#xff1f;&#xff1f;今年的双十一&#xff0c;开始地比以往早一些&#xff01;不知道各位程序员小哥哥们的战绩如何&#xff0c;是不是已经被一轮又一轮的定金、尾款&#xff0c;折腾到数学细胞耗尽&#xff1f;付款了也不清楚自己有没有真正的「…

FreeBSD设备驱动管理介绍(BSP: Ti AM335x)

这段时间一直在忙FreeBSD驱动移植的项目&#xff0c;因此对FreeBSD做了一定的了解&#xff0c;鉴于网上对于FreeBSD的设备驱动资料较少&#xff0c;在这里给出本人对于FreeBSD驱动管理的理解心得&#xff08;主要是USB驱动管理&#xff09;&#xff0c;希望能对开源开发者有所帮…

视障人士体验自动驾驶:携导盲犬登车,未来有望“自己开”

6月27日&#xff0c;滴滴出行首次面向公众开放自动驾驶服务。用户可通过滴滴APP线上报名&#xff0c;审核通过后&#xff0c;将能在上海自动驾驶测试路段&#xff0c;免费呼叫自动驾驶车辆进行试乘体验。现阶段&#xff0c;滴滴自动驾驶载人测试范围仅限于在上海开放测试道路上…

Listview获取选中行的值

一般情况请注意别先删除了选中行&#xff0c;又去使用。那就会导致找不到选中行。。。。。哥犯了这个错误。。。找了很长时间问题if (this.lstwlview.SelectedIndices.Count > 0) { if (MessageBox.Show("确认删除该条码&#xff1f;",…

asp.net中DataGrid性能测试

作者Blog&#xff1a;http://blog.csdn.net/yzdy/ 测试环境&#xff1a;数据库服务器:2.4G P4 CPU&#xff0c;2G 内存&#xff0c;Windows Advanced Server 2000&#xff0c;SQL Server 2000Web服务器&#xff1a;2.4G P4 CPU&#xff0c;1G 内存&#xff0c;Windows Advanced…

javassist学习笔记

2019独角兽企业重金招聘Python工程师标准>>> 介绍&#xff1a;www.javassist.org/ javassist、ASM 对比 1、javassist是基于源码级别的API比基于字节码的ASM简单。 2、基于javassist开发&#xff0c;不需要了解字节码的一些知识&#xff0c;而且其封装的一些工具类可…

金融领域首个开源中文BERT预训练模型,熵简科技推出FinBERT 1.0

出品 | AI科技大本营头图 | CSDN付费下载于东方IC为了促进自然语言处理技术在金融科技领域的应用和发展&#xff0c;熵简科技 AI Lab 近期开源了基于 BERT 架构的金融领域预训练语言模型 FinBERT 1.0。据悉&#xff0c;这是国内首个在金融领域大规模语料上训练的开源中文BERT预…

raspberry pi下使用mp3blaster播放mp3音乐

首先&#xff1a;sudo apt-get install mp3blaster mp3blaster wode.mp3会报错 但是加padsp mp3blaster wode.mp3 就可以正常播放了

把Excel文件中的数据读入到DataGrid中

作者Blog&#xff1a;http://blog.csdn.net/net_lover/使用Excel文件做为DataGrid的数据源是非常简单的&#xff0c;一旦数据被装载进来&#xff0c;就可以把数据再保存进SQL Server或XML中。我们只需要简单地使用OLE DB Provider 来访问Excel文件&#xff0c;然后返回DataSet即…

Vue 数组中更新属性值后,视图不更新,等待其他元素更新后会触发的解决办法...

因为 JavaScript 的限制&#xff0c;Vue.js 不能检测到下面数组变化&#xff1a; 直接用索引设置元素&#xff0c;如 vm.items[0] {}&#xff1b; 修改数据的长度&#xff0c;如 vm.items.length 0。 this.examineIntro.questionList[0].selList[1].url url;为了解决问题 (…

DeepMind 最新论文解读:首次提出离散概率树中的因果推理算法

翻译 | 高卫华出品 | AI科技大本营头图 | CSDN付费下载自视觉中国当前&#xff0c;一些前沿AI研究人员正在寻找用于表示上下文特定的因果依赖关系清晰的语义模型&#xff0c;这是因果归纳所必需的&#xff0c;在 DeepMind的算法中可看到这种概率树模型。概率树图用于表示概率空…

使用c#+(datagrid控件)编辑xml文件

作者Blog&#xff1a;http://blog.csdn.net/ouyang76cn/ 使用c#(datagrid控件)编辑xml文件 这个源码是我根据网上一个vb.net编辑xml文件的原理用c#重写的。除重用xml文件外.并未重用任何代码&#xff01;. 这小段代码&#xff0c;可对xml文件的记录进行删除&#xff0c;修改&am…

HorizontalTable

2019独角兽企业重金招聘Python工程师标准>>> HorizontalTable 实现了可水平滚动的 TableView。 转载:http://www.adobex.com/ios/source/details/00000761.htm 转载于:https://my.oschina.net/u/868244/blog/106055

敏捷软件开发的12个原则

作为一个软件工程师&#xff0c;软件设计和开发是最重要的技能&#xff0c;但是&#xff0c;从整个产品的角度上讲&#xff0c;项目管理能力比开发能力更重要&#xff0c;本文摘自Robert大叔的《敏捷软件开发》&#xff0c;粗体是Robert大叔的话&#xff0c;细体是我的理解。 1…

JAVE EE 企业级开发之从零开始学JAVA【51CTO技术论坛】

http://bbs.51cto.com JAVE EE 企业级开发之从零开始学JAVA 从零开始学JAVA&#xff1f;YES!本刊内容全部为午饭redking整理、撰写&#xff0c;所涉及内容均为原创&#xff0c;非常适合入门级JAVA新人学习&#xff0c;从理论到实际&#xff0c;跟随redking一起学习JAVA&#x…

打工人,打工魂,抽终身会员,成为人上人!

今年双11&#xff0c;CSDN直接来了个前所未有的福利大奖&#xff01;CSDN终身会员还有全站课程免费学&#xff01;喜欢吗&#xff1f;哈哈哈哈&#xff0c;还没完呢&#xff01;买CSDN年会员&#xff0c;不要&#xffe5;299&#xff0c;只要&#xffe5;199&#xff01;超级年…

如何创建一个用弹出窗口来查看详细信息的超链接列

如何创建一个用弹出窗口来查看详细信息的超链接列出处&#xff1a;www.dotnetjunkie.com 这篇文章来自于一位忠实的DotNetJunkie的建议&#xff0c;他最初发了一封email给我们&#xff0c;要求我们给出一个例子来说明如何在DataGrid中设置一个当用户点击时能够弹出显示其…

HashSet的使用

2019独角兽企业重金招聘Python工程师标准>>> 1.Set中元素是无序的 HashSet setnew HashSet(); set.add("a"); set.add("b"); set.add("c"); set.add("d"); System.out.println(set);//结果&#xff1a;[d,b,c,a]2.Set不允许…

python实现nginx图形界面管理

好久没有更新博客了&#xff0c;最近一直在学习python&#xff0c;于是&#xff0c;在有空闲的时间写下python视图界面管理nginx&#xff0c;写得不够好&#xff0c;不过希望能帮忙到其他童鞋&#xff0c;再次感叹&#xff0c;强大的python,不说了&#xff0c;上代码。 [rootlo…

小马智行获2.67亿美元新融资,估值超53亿美元

11月6日&#xff0c;小马智行&#xff08;Pony.ai&#xff09;宣布获得由加拿大安大略省教师退休基金会&#xff08;Ontario Teachers Pension Plan&#xff0c;OTPP&#xff09;旗下教师创新平台&#xff08;Teachers’ Innovation Platform, TIP&#xff09;领投总计2.67亿美…

DataSet导出CSV格式(ASP.NET,C#)

DataSet导出CSV格式(ASP.NET,C#)作者&#xff1a;NotMSN:notkinghotmail.comEmail:notssohu.com本文引用下面的 Microsoft .NET 框架类库命名空间&#xff1a;System.Data;System.Web.UI.WebControls;概要本文解决将DataSet导出到CSV格式问题、将DataGrid中的数据导出到CSV格式…

ArcEngine的ToolbarControl解析

转自Love Lyre原文 ArcEngine的ToolbarControl解析 ToolbarControlClass有三个主要的接口: IToolbarControl, IToolbarControl2, IToolbarControlDefault 其中,IToolbarControl2是IToolbarControl的新版本.而IToolbarControlDefault is a pure dispatch interface,始终是I…

在C#里实现DATAGRID的打印预览和打印

作者Blog&#xff1a;http://blog.csdn.net/qieyj/很多人都在论坛里问&#xff0c;如何实现DATAGRID的打印预览和打印&#xff0c;现在我就把这方面的源代码告诉大家。这段代码也花费了我1个晚上的时间&#xff0c;呵呵&#xff01;数据库是基于sql server2000自带的northwind。…

ORACLE SQL: 经典查询练手第二篇

本文使用的实例表结构与表的数据如下&#xff1a; scott.emp员工表结构如下&#xff1a; SQL> DESC SCOTT.EMP;Name Type Nullable Default Comments -------- ------------ -------- ------- -------- EMPNO NUMBER(4) 员工编号 ENAME…

第十三届光华工程科技奖名单揭晓!这40位专家和1个团体获奖

11月8日&#xff0c;第十三届光华工程科技奖揭晓仪式在北京隆重举行。工程科技是推动人类进步的发动机&#xff0c;是产业革命、经济发展、社会进步的有力杠杆。光华工程科技奖由中国工程院主管&#xff0c;目前已是第十三届&#xff0c;被誉为“中国工程界最高奖项”&#xff…