[.NET] SQL数据总笔数查询

程序下载

范例下载:点此下载

原始码下载:点此下载

NuGet封装:点此下载

数据查询

开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据。

SELECT Id, Name FROM Users

数据总笔数查询

当数据量过多时,系统会需要采用分页的方式来分批取得数据,但在这之前需要先取得数据总笔数,来告知系统共有多少数据等待处理。这时可以改写原有的SQL查询指令,在其中加入COUNT(*),来计算查询结果的总笔数。(将查询指令改写为子查询来取得数据总笔数,是以方便改写为前提来设计。)

SELECT COUNT(*)
FROM ( SELECT Id, Name FROM Users ) __QueryCountTable

提取为共享方法

上述这个改写SQL查询指令的动作,是很机械化的固定动作,透过抽取其中的动作流程,可以建立一个共享方法:GetQueryCountText方法。透过这个GetQueryCountText方法,开发人员传入查询的SQL查询指令,GetQueryCountText方法就会改写这个SQL查询指令,回传一个提供数据总笔数数据的SQL总笔数查询指令。开发人员使用C#来执行这个SQL总笔数查询指令,就能在系统中提供数据总笔数查询的功能。

using (SqlCommand command = new SqlCommand())
{
// Connection
command.Connection = connection; // CommandText
command.CommandText = @"SELECT Id, Name FROM Users"; // QueryCountText
command.CommandText = SqlCommandExtensions.GetQueryCountText(command.CommandText); // Execute
count = Convert.ToInt32(command.ExecuteScalar());
}

public static string GetQueryCountText(string commandText, string fieldName = "*")
{
#region Contracts if (string.IsNullOrEmpty(commandText) == true) throw new ArgumentNullException();
if (string.IsNullOrEmpty(fieldName) == true) throw new ArgumentNullException(); #endregion // QueryCountText
var queryCountText = @"SELECT COUNT({0})
FROM (
{1}
) __QueryCountTable"; queryCountText = string.Format(queryCountText, fieldName, commandText); // Return
return queryCountText;
}

封装为扩充方法

为了更方便开发人员使用GetQueryCountText方法,可以将这个方法近一步封装成为SqlCommand类别的扩充方法:ExecuteQueryCount方法,让数据总笔数查询功能伪装成为SqlCommand类别的方法。后续开发人员只要建立SQL查询指令,并且执行ExecuteQueryCount方法,就能够很快速的在系统中提供数据总笔数查询的功能。

using (SqlCommand command = new SqlCommand())
{
// Connection
command.Connection = connection; // CommandText
command.CommandText = @"SELECT Id, Name FROM Users"; // Execute
count = command.ExecuteQueryCount();
}

public static int ExecuteQueryCount(this SqlCommand command, string fieldName = "*")
{
#region Contracts if (command == null) throw new ArgumentNullException();
if (string.IsNullOrEmpty(fieldName) == true) throw new ArgumentNullException(); #endregion // QueryCountText
var queryCountText = GetQueryCountText(command.CommandText, fieldName); // ExecuteQueryCount
var commandText = command.CommandText;
try
{
// Set
command.CommandText = queryCountText; // Execute
return Convert.ToInt32(command.ExecuteScalar());
}
finally
{
// Reset
command.CommandText = commandText;
}
}

[.NET] SQL数据总笔数查询的更多相关文章

  1. SQL数据操作和查询

    1.Oracle中可以把查询的结果根据结果集中的表结构和数据形成一张新表. CREATE TABLE 表名 AS SELECT语句,例如: CREATE TABLE INFOS1 AS SELECT  ...

  2. 数据库——SQL数据单表查询

    数据查询   语句格式 SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] … FROM <表或视图名>[,<表或视图名&g ...

  3. Sql Server 存储过程中查询数据无法使用 Union(All)

    原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...

  4. 使用传入的总记录数实现一条sql语句完成分页查询

    使用传入的总记录数实现一条sql语句完成分页查询     问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使 ...

  5. SQL数据查询之——单表查询

    一.SQL数据查询的一般格式 数据查询是数据库的核心操作.SQL提供了SELECT语句进行数据查询,其一般格式为: SELECT [ALL | DISTINCT]<目标列表达式>[,< ...

  6. Database基础(三):SQL数据导入/导出、 操作表记录、查询及匹配条件

    一.SQL数据导入/导出 目标: 使用SQL语句完成下列导出.导入操作: 将/etc/passwd文件导入userdb库userlist表并给每条记录加编号 将userdb库userlist表中UID ...

  7. [.NET] SQL数据分页查询

    [.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...

  8. SQL Server 基础 03 查询数据基础

    查询数据 简单的查询 create table stu_info ( sno int not null ,sname ) not null ,sex ) not null ,birth ) not n ...

  9. sql大数据多条件查询索引优化

    此优化的前提可以称之为最近流行的头条人物“许三多”,总数据多,查询条件多,返回列多 优化前分页查询内部select列为需要的全部列,优化后内部select只返回ID主键,外部查询关联原数据表,然后查出 ...

随机推荐

  1. 用C#制作PDF文件全攻略

    用C#制作PDF文件全攻略 目  录 前    言... 3 第一部分 iText的简单应用... 4 第一章 创建一个Document 4 第一步 创建一个Document实例:... 5 第二步 ...

  2. Part 1: Running Oracle E-Business Suite on Oracle Cloud

    You can now run Oracle E-Business Suite on Oracle Cloud.  EBS customers can take advantage of rapid ...

  3. ruby -- 进阶学习(二)paperclip上传图片

    Need to add image attachments to a model? See how with paperclip in this episode. 在命令行输入: rails g pa ...

  4. Mobiles Wall – 致力于分享最优质的手机壁纸

    大多数人都经常修改手机壁纸,让收集看起来更酷.Mobiles Wall 是一个响应式的网站,致力于分享最优质的手机壁纸,类型非常多,包括:抽象,动物,艺术,汽车,食品及饮料,游戏,照片,电影,音乐,自 ...

  5. 链表中倒数第k个结点

    题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 因为是单向链表,如果使用最普通的遍历来解决的话会多出很多不必要的遍历.有一个比较好的解法,设置两个指针两个指针之间差k-1个位置,也就是当后 ...

  6. Android 学习笔记 Service

    PS:前几篇的内容光是上代码了,也没有细细的讲解..感觉这样写很不好..因此还是多一些讲解吧... 学习内容: 1.了解Service... 2.Service的启动与停止.. 3.绑定与取消绑定Se ...

  7. ASP.NET跨服务器上传文件的相关解决方案

    第一种:通过FTP来上传文件 首先,在另外一台服务器上设置好FTP服务,并创建好允许上传的用户和密码,然后,在ASP.NET里就可以直接将文件上传到这台 FTP 服务器上了.代码如下: <%@ ...

  8. 《构建之法》第8、9、10章的读后感和第一个sprint总结

    第八章——主要介绍软件需求. 主要步骤:1.获取和引导需求.2.分析和定义需求.3.验证需求.4.在软件产品的生命周期中管理需求. 对软件需求的划分:1.对产品功能性的需求.2.对产品开发过程的需求. ...

  9. 使用MinGW 编译 iconv 库

    原文链接: http://www.code-by.org/viewtopic.php?f=54&t=166 GNU页面 http://ftp.gnu.org/pub/gnu/libiconv/ ...

  10. C#方法的重载和方法的可变参数

    方法的重载 1.方法重载的前提:方法名称必须一样 2.构成重载的条件:参数不一样(参数数量不一样,参数类型不一样) 方法的可变参数 1.可变参数的值的数量可以是0到多个. 2.可变参数调用的时候,没有 ...