首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

分頁演算法元件:Pager_SQL 詳細使用指南與注意事項

     編輯:關於ASP.NET

Pager_SQL (原 QuickPager_SQL) 為獨立分頁 SQL 產生元件,支援多種資料庫分頁語法 (Max/Min、ROW_NUMBER、TOP、LIMIT、ROWNUM) 與多欄位排序。本文詳細說明屬性設定、分頁演算法選擇、SQL 產生流程與狀態持久化機制。

完整設定範例

var pager = new JYK.Controls.Pager.QuickPagerSQL();

// 1. 狀態持久化設定
pager.SaveLocation = JYK.Common.SaveViewStateLocation.NoSave; // 不持久化
// pager.SaveLocation = SaveViewStateLocation.HiddenField; // 預設:隱藏欄位
// pager.SaveKey = "12121212"; // 8 位數字密鑰加密,空字串不加密,null 使用預設

// 2. 查詢定義
pager.TableName = "News_NewsInfo";           // 表/檢視表名稱
pager.TableShowColumns = "*";              // 顯示欄位
pager.TableIDColumn = "NewsID";            // 主鍵 (不支援複合主鍵)
pager.TableOrderByColumns = "NewsID";      // 排序欄位,支援多欄位
pager.TableQuery = "";                     // WHERE 條件 (不含 WHERE 關鍵字)

// 3. 分頁參數
pager.PageSize = 4;                        // 每頁筆數

// 4. 選擇分頁演算法
pager.SetPagerSQLKind = PagerSQLKind.MaxMin; // 可選: MaxMin, RowNumber, Top, Limit 等

// 5. 產生 SQL
pager.CreateSQL();

// 6. 取得統計 SQL 並設定總筆數
string countSql = pager.GetRecordCountSQL; // SELECT COUNT(1) FROM ...
pager.PageCount = 100;                     // 實際從資料庫查詢取得
pager.ComputePageCount();                  // 計算總頁數,防止頁碼越界

// 7. 取得指定頁 SQL
string pageSql = pager.GetSQLByPageIndex(3); // 第 3 頁 SQL
// 頁碼超過總頁數 → 回傳最後一頁;小於 1 → 回傳第一頁

分頁演算法種類 (PagerSQLKind)

FAQ:為何需要 SaveLocation 與 SaveKey?

背景:Pager_SQL 從 QuickPager 控件剝離,原設計需在 Web 控件生命週期中跨 PostBack 保持屬性值 (TableName, OrderBy 等)。

  • 控件 Page_Load 較晚執行,屬性賦值來不及 → 需在 OnInit 或 ViewState 保持。
  • ViewState 內容可被反序列化 → 敏感資訊 (表名、欄位) 洩露風險。
  • 解決方案:自訂序列化儲存至 HiddenField/Cookie/Session,並可加密 (SaveKey)。

現代用法:若在 MVC/ASP.NET Core 中直接使用,通常每請求重新建構,設定 SaveLocation = NoSave 即可。

注意事項

  1. SQL 一致性:快取鍵基於生成 SQL,條件順序不同會導致快取失效 (同 18354 文章)。
  2. 主鍵限制:不支援複合主鍵,需使用單一欄位 (通常為 Identity/BigInt)。
  3. 大資料量:COUNT(*) 可能緩慢,建議搭配快取觸發器或估算總筆數。
  4. 參數化:產出的 SQL 為字串,實際執行時請使用參數化查詢防注入。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
演算法適用資料庫特點
MaxMinSQL Server 2000+單欄位排序、效能佳、不支援多欄位排序
RowNumberSQL Server 2005+支援多欄位排序、標準語法
TopSQL Server 2000+巢狀 TOP,相容性好
LimitMySQL, PostgreSQL, SQLite原生 LIMIT offset, count
RownumOracle巢狀 ROWNUM 過濾