[.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主键,外部查询关联原数据表,然后查出 ...
随机推荐
- 网友对twisted deferr的理解
事實上Deferred的確就像是一連串的動作,用callback的形式被串在一起,我們用deferred或許可以這樣寫 d.addCallback(洗菜)d.addCallback(切菜)d.addC ...
- STAF自动化测试框架
STAF自动化测试框架介绍 http://baike.baidu.com/link?url=9oPZN3JntRakidI7xizqCbyGRISMvCKGfXHBB_WH7OAkKjAKZjq88q ...
- 生成证书时Distribution下面App Store and Ad Hoc 选项不能选择的原因及解决办法
出现这个问题的原因是:发布用的证书创建是有数量限制的,仅支持3个,所以把原先不用的证书Revoke掉就可以了
- python 字符串替换
字符串替换可以用内置的方法和正则表达式完成.1用字符串本身的replace方法: a = 'hello word'b = a.replace('word','python')print b 2用正则表 ...
- Android事件传递机制
http://blog.csdn.net/awangyunke/article/details/22047987 1)public boolean dispatchTouchEvent(MotionE ...
- 【转载】 IE/Firefox每次刷新时自动检查网页更新,无需手动清空缓存的设置方法
[参考了别人的文章]我们做技术,经常在写页面的时候需要多次刷新测试,可是浏览器都有自己的 缓存机制,一般CSS和图片都会被缓存在本地,这样我们修改的CSS就看不到效果 了,每次都去清空缓存,再刷新看效 ...
- C#获取类以及类下的方法(用于Asp.Net MVC)
在C#中,实现动态获取类和方法主要通过反射来实现,要引用System.Reflection. public ActionResult GetControllerAndAction() List< ...
- `cocos2dx非完整` 日志模块 增量更新
在上一篇文章中,说到了"流程"的由来,以及我对流程的使用. 这一片就是对流程的应用.前一篇文章中说到了三条流程 check_log_measure, check_env_measu ...
- cocos2d-x中使用可加密Sqlite存储玩家数据
手机游戏当中的数据存储是一个重要的课题.cocos2d-x发展到现在的版本2.1.4,已经直接实现了对sqlite的支持(extensions/LocalStorage),这对我们一般的数据存储已经够 ...
- [python]逆水行舟不进则退(1)
工作后迎来的第一个长假期,打算在家休息一下,看看书之类的.但是不写点东西,不做点东西,感觉有些浪费时间.同时也想通过做点东西检验下自己这段时间的收获.其实在我开始写这篇文章的时候心里还是很没底的-交代 ...