[.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. WindowsStore页面导航

    第一个页面:前台 <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> &l ...

  2. nginx server_name

    在我的机子了nginx的  server_name要配制成127.0.0.1才能用,否则就报错,刚试用nginx还不知道为什么,先记下来

  3. WPF中如何用代码触发按钮Click处理

    btnOk.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));

  4. 批量Ping IP

    刚刚接触Python 想做点什么 听说Python 在网络方便很厉害 后来总结如下: 第一:发现公司都固定IP 每次新来同事都要猜一个没有人用的IP  很费劲 第二:我们公司有的IP可以上QQ 有的不 ...

  5. C#读取物理网卡信息及其对应的IP地址

    using Microsoft.Win32; using System; using System.Collections; using System.Collections.Generic; usi ...

  6. Web API 入门系列 - RESTful API 设计指南

    参考:https://developer.github.com/v3/  https://github.com/bolasblack/http-api-guide HTTP 协议 目前使用HTTP1. ...

  7. 如何复制DataRow(dataTabel中的行)

    由于需要对dataTabel中的行进行上移和下移操作: row 1      行号0 row2       行号1 row3       行号2 例如将row3上移一行,即row2和row3对调位置. ...

  8. Swift初学习

    距离swift发布10天了,也简单看了一下swift的语法,个人感觉相对于object-c很是简单明了.Swift的出现并不能说明iOS开发简单了很多,有可能会变得复杂,你需要学习两门编程语言,因为在 ...

  9. C float与char数组 互转

    //转换float数据到字节数组 unsigned char i; float floatVariable; unsigned ]; (unsigned char) *pdata = ((unsign ...

  10. MyBatis知多少(2)

    MyBatis从目前最流行的关系数据库访问方法中吸收了大量的优秀特征和思想,并找出其中的协同增效作用.下图展示了MyBatis框架是如何吸收我们在多年使用不同方式进行数据库集成的 开发过程中所学到的知 ...