国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

[.NET] SQL數據總筆數查詢

2019-11-17 03:07:25
字體:
來源:轉載
供稿:網友

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

提取為共享方法01

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

封裝為擴充方法01

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;    }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南京市| 颍上县| 香格里拉县| 潍坊市| 奉节县| 萍乡市| 祁阳县| 武陟县| 卓资县| 邹城市| 浮梁县| 定州市| 大同市| 吉安县| 滕州市| 商都县| 灵山县| 苏州市| 刚察县| 石棉县| 木兰县| 元阳县| 涿鹿县| 平昌县| 五华县| 长阳| 石景山区| 金乡县| 柳林县| 友谊县| 沁水县| 睢宁县| 宣威市| 鹤庆县| 宁蒗| 随州市| 玛曲县| 渭南市| 荔波县| 邮箱| 健康|