[.NET] SQL数据总笔数查询
[.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数据总笔数查询的更多相关文章
- SQL数据操作和查询
1.Oracle中可以把查询的结果根据结果集中的表结构和数据形成一张新表. CREATE TABLE 表名 AS SELECT语句,例如: CREATE TABLE INFOS1 AS SELECT ...
- 数据库——SQL数据单表查询
数据查询 语句格式 SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] … FROM <表或视图名>[,<表或视图名&g ...
- Sql Server 存储过程中查询数据无法使用 Union(All)
原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...
- 使用传入的总记录数实现一条sql语句完成分页查询
使用传入的总记录数实现一条sql语句完成分页查询 问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使 ...
- SQL数据查询之——单表查询
一.SQL数据查询的一般格式 数据查询是数据库的核心操作.SQL提供了SELECT语句进行数据查询,其一般格式为: SELECT [ALL | DISTINCT]<目标列表达式>[,< ...
- Database基础(三):SQL数据导入/导出、 操作表记录、查询及匹配条件
一.SQL数据导入/导出 目标: 使用SQL语句完成下列导出.导入操作: 将/etc/passwd文件导入userdb库userlist表并给每条记录加编号 将userdb库userlist表中UID ...
- [.NET] SQL数据分页查询
[.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...
- SQL Server 基础 03 查询数据基础
查询数据 简单的查询 create table stu_info ( sno int not null ,sname ) not null ,sex ) not null ,birth ) not n ...
- sql大数据多条件查询索引优化
此优化的前提可以称之为最近流行的头条人物“许三多”,总数据多,查询条件多,返回列多 优化前分页查询内部select列为需要的全部列,优化后内部select只返回ID主键,外部查询关联原数据表,然后查出 ...
随机推荐
- MemCached用法
所需要的jar包: com.danga.MemCached.MemCachedClient com.danga.MemCached.SockIOPool 自行下载/** * 缓存服务器集群,提供缓存连 ...
- 移动端使用HTML5表单增强体验
我们知道,HTML5新增了许多表单类型,如: number,email,url,tel,datetime,month,datetime-local等等,像datetime,month这些非常方便,免得 ...
- 基于SWFUpload的angular上传组件
回顾 由于工作内容比较多,特别是架构方面,需要耗费很多的时间调整.重构,因此很久没有写文章了. 话就不多说了,直接进入主题. 实现 首先分析一下SWFUpload初始化的时候,需要传入当前触发上传的元 ...
- HIVE: SerDe应用实例
数据文件内容 id=123,name=steven id=55,name=ray 期望输出格式 123 steven 55 ray 1. 创建表, 用正则表达式的形式指定格式 create table ...
- 开发Chrome Extension截取你微博的帐号密码
Google允许开发者对Chrome浏览器做扩展,所以有了之前火爆的12306抢票软件,我 也用它抢过票,一直很好奇它怎么注入js到12306上面的.这周有空研究了下Chrome Extension, ...
- unix/linux中图形界面那些事
我们知道unix/linux刚开始的时候是没有图形界面的,随着时代的发展,排版.制图.多媒体应用越来越普遍了,这些需求都需要用到图形界面(Graphical User Interface).为此,MI ...
- 网络爬虫urllib2 tornado
百度不支持用tornado请求,可以用美团开放API 测试. import tornado.httpclient def fetch(url): http_header={'User-Agent':' ...
- [python基础知识]python内置函数map/reduce/filter
python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法) ...
- Copy和MutableCopy
实现拷贝的方法 -copy: 1.只会产生不可变的副本对象(比如:NSString) 2.[NSMutableString copy] 产品一个不可变的nsstring对象 -mutaleCopy: ...
- 写出优美代码的两个方式:一步到位VS迭代优化
最近把手头这个安卓APP的所有事务性方法都写完了,有了以下体会,新手体会,老鸟轻拍 想写成优美代码的人一般都会有这样的想法: 一定要在写每一句代码,写每一个方法,构造每一个类的时候,都要记得优化: ...