Repository navigation
OTR_ListPaging
nishi_74322014 edited this page Oct 27, 2026
·
1 revision
検索結果などの一覧を、ページに分けて表示する方式。
- 全件を取得してメモリでページングしない。 SQL でページングするのが基本。
- 最大表示件数・最大取得件数(打ち切りの上限)は、業務要件で決めてアプリ側に設定する。
| 方式 | 概要 | 向き |
|---|---|---|
| ① アプリケーション制御 | 主キーだけを先に取得し、表示するページの主キーで本体を再検索する | DBMS に依存しない |
| ② ストアド・プロシージャ制御 | サーバ側で範囲(例:101〜200 件目)を絞って返す | ロジックを DB 側に置きたいとき |
| ③ SQL 制御 |
ROW_NUMBER() などで範囲を SQL に埋める |
最も一般的 |
-- SQL Server
WITH T AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY ShipperID) AS RNUM FROM Shippers
)
SELECT * FROM T WHERE RNUM BETWEEN @FROM AND @TO-- Oracle
SELECT * FROM (
SELECT S.*, ROW_NUMBER() OVER (ORDER BY ShipperID) AS RNUM FROM Shippers S
) WHERE RNUM BETWEEN :FROM AND :TO- SQL 定義ファイルは DBMS ごとに用意する。
- ソート列や絞り込みを可変にするなら、動的パラメタライズド・クエリを使う(ソート列は
VALタグに許可リストの値だけを渡す)。
- 総件数が要るなら、別に
COUNT(*)を取る(自動生成 Dao のD5_SelCnt())。 - 大量のデータを流すなら、
ExecSelect_DR(DataReader)がExecSelectFill_DTより速い。 - UI のページャ(
GridViewのPageIndexChangingなど)は表示の制御である。データの取得方式と混同しない。 UI だけでページングすると、全件を取得してしまう。
- スキル
opentouryo-app-design(references/list-paging.md)とopentouryo-query-definitionを使わせる。 - エージェントは全件取得 + LINQ の
Skip/Takeで済ませがちなので、SQL でページングしているかを確認する。
Tags: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。