码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2014-06-02 12:33:31      阅读:321      评论:0      收藏:0      [点我收藏+]

标签:c   class   blog   code   a   http   

[.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());
}

bubuko.com,布布扣

public static string GetQueryCountText(string commandText)
{
    #region Contracts

    if (string.IsNullOrEmpty(commandText) == true) throw new ArgumentNullException();

    #endregion

    // QueryCountText
    var queryCountText = @"SELECT COUNT(*)
                            FROM  (
                                    {0}
                                  ) __QueryCountTable";

    queryCountText = string.Format(queryCountText, 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();
}

bubuko.com,布布扣

public static int ExecuteQueryCount(this SqlCommand command)
{
    #region Contracts

    if (command == null) throw new ArgumentNullException();

    #endregion

    // QueryCountText
    var queryCountText = GetQueryCountText(command.CommandText);

    // ExecuteQueryCount
    var commandText = command.CommandText;
    try
    {
        // Set
        command.CommandText = queryCountText;

        // Execute
        return Convert.ToInt32(command.ExecuteScalar());
    }
    finally
    {
        // Reset
        command.CommandText = commandText;
    }
}

[.NET] SQL数据总笔数查询,布布扣,bubuko.com

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

标签:c   class   blog   code   a   http   

原文地址:http://www.cnblogs.com/clark159/p/3764157.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!