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 → 回傳第一頁
| 演算法 | 適用資料庫 | 特點 |
|---|---|---|
| MaxMin | SQL Server 2000+ | 單欄位排序、效能佳、不支援多欄位排序 |
| RowNumber | SQL Server 2005+ | 支援多欄位排序、標準語法 |
| Top | SQL Server 2000+ | 巢狀 TOP,相容性好 |
| Limit | MySQL, PostgreSQL, SQLite | 原生 LIMIT offset, count |
| Rownum | Oracle | 巢狀 ROWNUM 過濾 |