相關下載:
DeveloperSharp.dll組件
DeveloperSharp.dll組件
高效分頁-示例代碼(dp8-Paging.rar)
高效分頁-示例代碼(dp8-Paging.rar)
資料分頁,幾乎是任何應用系統的必備功能,但當資料量較大時,分頁操作的效率就會變得很低,大資料量分頁時,一個操作耗時5秒、10秒、甚至更長時間都是有可能的,但這在用戶使用的角度是不可接受的……
資料分頁往往有三種常用方案,
第一種,把資料庫中存放的相關資料,全部讀入代碼/記憶體,再由代碼對其進行分頁操作,
第二種,直接在資料庫中對相關資料進行分頁操作,再把分頁后的資料輸出給代碼程式,
第三種,先把資料庫中的相關資料全部讀入“快取”,再由代碼程式對“快取”中的資料進行讀取+分頁操作,
本文下面重點闡述第一種與第二種兩個解決方案,它們也都是直接基于“資料庫”的,
(第三種方案雖然速度較快,但由于需要用到“快取”這類第三方工具,且在有資料更改時需要較復雜的“資料庫-快取”同步操作,故本文暫不詳述,)
◆◆第一種方案如下◆◆
引入DeveloperSharp.dll組件,初始化IUtility工具
using DeveloperSharp.Framework.CoreUtility; -------------------------- IUtility IU = new Utility();
IUtility內構建有3個多載的分頁PagePartition方法:
PagePartition 宣告:PagePiece PagePartition(DataTable Table, int PageSize, int PageIndex) 用途:分頁功能 引數:(1)DataTable Table -- 需要分頁的DataTable (2)int PageSize -- 頁面大小 (3)int PageIndex -- 當前頁碼(最小值為1) 回傳:PagePiece -- 頁片物體 PagePartition 宣告:PagePiece<List<T>> PagePartition<T>(IQueryable<T> DataList, int pageSize, int pageIndex) where T : class 用途:分頁功能 引數:(1)IQueryable<T> DataList -- 需要分頁的IQueryable (2)int PageSize -- 頁面大小 (3)int PageIndex -- 當前頁碼(最小值為1) 回傳:PagePiece -- 頁片物體 PagePartition 宣告:PagePiece<List<T>> PagePartition<T>(List<T> DataList, int pageSize, int pageIndex) where T : class 用途:分頁功能 引數:(1)List<T> DataList -- 需要分頁的List (2)int PageSize -- 頁面大小 (3)int PageIndex -- 當前頁碼(最小值為1) 回傳:PagePiece -- 頁片物體
分頁方法的回傳值PagePiece/PagePiece<T>類,包含分頁后的資料集、總頁數、總資料、當前頁碼、等等一系列“分頁”后經常會用到的資料,PagePiece/PagePiece<T>的屬性的詳細說明如下:
PageSize 宣告:public int PageSize; 用途:int --頁面大小 TotalPageNumber 宣告:public int TotalPageNumber; 用途:int --總頁數 TotalRecordNumber 宣告:public int TotalRecordNumber; 用途:int --記錄總數 CurrentStartIndex 宣告:public int CurrentStartIndex; 用途:int --當前頁的記錄起始編號 CurrentEndIndex 宣告:public int CurrentEndIndex; 用途:int --當前頁的記錄結束編號 CurrentPageSize 宣告:public int CurrentPageSize; 用途:int --當前頁的記錄數量 CurrentPageIndex 宣告:public int CurrentPageIndex; 用途:int --當前頁碼 Table 宣告:public System.Data.DataTable Table; 用途:System.Data.DataTable--當前頁的資料表 (或者) DataList 宣告:public List<T> DataList; 用途:List<T>--當前頁的資料
◆◆第二種方案如下◆◆
為了演示“第二種分頁方案”如何使用,我們首先在Visual Studio中新建一個控制臺工程,然后,我們做如下三個操作,
【第一步】:為工程參考添加 DeveloperSharp.dll組件,
【第二步】:創建一個用來與資料庫進行通信的“資料源類”(文本示例為:TestData.cs),內容如下:
using DeveloperSharp.Structure.Model;//DataSource的命名空間 using DeveloperSharp.Framework.QueryEngine;//DatabaseType的命名空間 namespace YZZ { [DataSource(DatabaseType.SQLServer, "Server=localhost;Database=Test;Uid=sa;Pwd=123")] public class TestData : DeveloperSharp.Structure.Model.DataLayer { //類中沒有任何代碼 } }
說 明 :“資料源類”(文本示例為:TestData.cs)必 須 繼 承 自 DeveloperSharp.Structure.Model.DataLayer 類 , 并 且 在 其 上 設 置DataSource屬 性 的 初 始 化 值 為“資料庫型別”及其“鏈接字串”,
【第三步】:為控制臺應用類,添加通過“資料源類”(TestData)呼叫其PagePartition方法進行資料分頁的代碼,注 意:核心代碼就一行而已!!
代碼如下:
using DeveloperSharp.Structure.Model;//PagePiece所在的命名空間 using DeveloperSharp.Extension;//Table擴展所在的命名空間 ----------------------------- class Program { static void Main(string[] args) { TestData td = new TestData(); //分頁 PagePiece pp = td.PagePartition("select top 500000 * from t_Order where Id>10 order by Id desc", 20, 162); List<Product> Products = pp.Table.ToList<Product>(); foreach (var P in Products) { Console.WriteLine(P.Name); } Console.ReadLine(); } }
Product類代碼如下:
public class Product { public string Id { get; set; } public string Name { get; set; } public int Quantity { get; set; } }
此處的PagePartition方法有兩個多載方法,其詳細功能說明如下:
PagePartition 宣告:public PagePiece PagePartition(string RecordSet, string Id, int PageSize, int PageIndex) 用途:分頁功能(有主鍵) 引數:(1)string RecordSet --需要分頁的記錄集,可以是表、視圖、或者SQL陳述句 (2)string Id --主鍵 (3)int PageSize --頁面大小 (4)int PageIndex --當前頁碼(最小值為1) 回傳:PagePiece --頁片物體 PagePartition 宣告:public PagePiece PagePartition(string RecordSet, int PageSize, int PageIndex) 用途:分頁功能(無主鍵) 引數:(1)string RecordSet -- 需要分頁的記錄集,可以是表、視圖、或者SQL陳述句 (2)int PageSize --頁面大小 (3)int PageIndex --當前頁碼(最小值為1) 回傳:PagePiece --頁片物體
注意:
(1) 當你需要分頁的資料表有“主鍵”欄位時,使用“分頁功能(有主鍵)”,反之,使用“分頁功能(無主鍵)”,
(2) RecordSet是你需要分頁的“資料總集”的SQL陳述句,該SQL陳述句的形式豐富多樣,可以帶條件、排序、甚至還能是多表的聯合查詢、等,
推薦閱讀
- .NET中大型專案開發必備(1)–UUID全球通用唯一識別碼
- .NET中大型專案開發必備(2)–CORS跨域訪問
- .NET中大型專案開發必備(3)–資料庫的負載均衡
- .NET中大型專案開發必備(4)–資料庫的讀寫分離
- .NET中大型專案開發必備(5)–Web服務/WebApi的負載均衡
- .NET中大型專案開發必備(6)–IUtility工具介紹
- .NET中大型專案開發必備(7)–ORM資料庫訪問技術
- .NET中大型專案開發必備(8)–高效分頁
![]() | 如果文章對你有幫助,請點贊、收藏、關注(原創內容,歡迎轉載,轉載請注明出處) 有疑問想獲取專業技術支持?請掃描左側微信二維碼聯系作者 出處:https://www.cnblogs.com/DeveloperSharp/ 本文采用「CC BY 4.0」知識共享協議進行許可,轉載請注明作者及出處, |
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/415894.html
標籤:.NET技术
上一篇:.NET中大型專案開發必備(7)--ORM資料庫訪問技術
下一篇:如何通過按下按鈕隱藏json?

