.NET TIPS

[ASP.NET]GridViewコントロールにストアド・プロシージャの結果を反映させるには?[2.0、3.0、3.5、C#、VB]

山田 祥寛
2009/04/09

 ストアド・プロシージャ(Stored Procedure)とは、名前のとおり、データベースに保存された(Stored)手続き(Procedure)のこと。アプリケーションから都度発行されるSQL命令と異なり、すでに解析/コンパイルが済んだ状態でデータベース上に置かれるため、実行時のオーバーヘッドが少ないというメリットがある。

 ここまで、「TIPS:[ASP.NET]GridViewコントロールでデータソースの内容を表示するには?」などでは、主にアプリケーション側から直接にSQL命令を発行する方法について紹介しているが、本稿ではデータベース上にあらかじめ用意されたストアド・プロシージャを、ASP.NETページから呼び出す方法について紹介する。

 ここで紹介するサンプルは、以下のようにラジオボタンで選択された価格帯の書籍情報だけをグリッド表に絞り込み表示するものだ。ただし、「指定なし」を選択した場合には登録済みのすべての書籍情報を表示するものとする。

選択された価格帯の書籍だけを一覧表示する

 なお、本稿のサンプルを動作させるに当たっては、「TIPS:[ASP.NET]GridViewコントロールでデータソースの内容を表示するには?」で使用したBookテーブルをあらかじめ用意しておく必要がある。

 それではさっそく、サンプル作成の具体的な手順を見ていくことにしよう。

1. ストアド・プロシージャを作成する

 ストアド・プロシージャを作成するには、Visual StudioのIDEの[サーバー エクスプローラ](以下、サーバ・エクスプローラ)のツリーから、[データ接続]−[DotNetTips.mdf]−[ストアド プロシージャ]の項目を右クリックし、表示されたコンテキスト・メニューから[新しいストアド プロシージャの追加]を選択する(「DotNetTips.mdf」の部分は使用しているデータベースによって異なる)。

 コード・エディタにストアド・プロシージャの骨格が生成されるので、これを以下リストのように修正する。

CREATE PROCEDURE SelectProc
  @price INT
AS
  IF @price <= 0
    BEGIN
      SELECT * FROM book ORDER BY price DESC
    END
  ELSE
    BEGIN
      SELECT * FROM book
        WHERE price >= @price - 1000
          AND price < @price
    END
ストアド・プロシージャ「SelectProc」の定義

 ストアド・プロシージャを作成するのは、CREATE PROCEDURE命令の役割だ。CREATE PROCEDURE命令の一般的な構文は次のとおりである。

CREATE PROCEDURE プロシージャ名
  [@パラメータ名 データ型 [= デフォルト値]]
AS
  ストアド・プロシージャとして実行する命令(群)
CREATE PROCEDURE命令の一般的な構文

 つまり、先ほどのリストではINT型の@priceパラメータを受け取る「SelectProc」という名前のプロシージャを定義しているわけだ。続いて、プロシージャの本体であるAS句配下のコードを見ていこう。

 ストアド・プロシージャでは、条件分岐や繰り返し処理、例外処理などをVisual Basicに比較的似た構文で記述できる。ここでは条件分岐構文のIF...ELSE命令を使って、パラメータ@priceの値が0以下であるかどうかを判定し、0以下である場合にはすべてのレコードを、0より大きい場合には「@price - 1000以上、@price未満」のレコードのみを、それぞれbookテーブルから取り出している。

 IF...ELSE命令の一般的な構文は、次のとおり。

IF 条件式
  条件式がTrueである場合に実行する命令(群)
ELSE
  条件式がFalseである場合に実行する命令(群)
ストアド・プロシージャのIF...ELSE命令の一般的な構文

 IF...ELSEブロック配下のBEGIN...ENDブロックは、配下の命令群が1つの固まりであることを示すものである。ただし、サンプルのようにIF...ELSEブロックの配下の命令が1つしかない場合には省略しても構わない。

2. ストアド・プロシージャをテスト実行する

 SelectProcプロシージャを保存したら、サーバ・エクスプローラの[ストアド プロシージャ]配下にいま作成したストアド・プロシージャが追加されるはずだ。ストアド・プロシージャが正しく定義できたら、ASP.NET(GridViewコントロール)にひも付ける前に、まずは単体で実行してみよう。

 ストアド・プロシージャをテスト実行するには、サーバ・エクスプローラ上に追加された[SelectProc]を右クリックし、表示されたコンテキスト・メニューから[実行]を選択すればよい。

[ストアド プロシージャ の実行]ダイアログ

 上の画面のような[ストアド プロシージャ の実行]ダイアログが表示されるので、ここでは@priceパラメータに値として(例えば)「2000」をセットしてみよう。

 [OK]ボタンをクリックすると、[出力]ウィンドウには「1000円以上2000円未満」の書籍情報が表示されることが確認できるはずだ。

[出力]ウィンドウ
@priceパラメータの設定値に従って、この場合は1000円以上2000円未満の書籍情報だけが表示される。

3. 新規のWebフォームを作成する

 新規のWebフォーム(Stored.aspx)を作成したら、フォーム・デザイナから以下の画面の要領でサーバ・コントロールを配置する。

Stored.aspxのフォーム・レイアウト
以下のコントロールを配置。
  RadioButtonListコントロール(IDは「rdoExp」)。
  GridViewコントロール(IDは「list」。オートフォーマットは「オセアニカ」)。

 RadioButtonListコントロールのItemsプロパティ(正確には、その配下のListItemオブジェクトのプロパティ)には、選択オプションを以下の表のように設定しておこう。Itemsプロパティは、プロパティ・ウィンドウからItemsプロパティ右端の[...]ボタンをクリックし、表示された[ListItem コレクション エディタ]ダイアログから設定できる。

[ListItem コレクション エディタ]ダイアログ

No. Selected Text Value
0 True 指定なし 0
1 False 1000〜2000円 2000
2 False 2000〜3000円 3000
3 False 3000〜4000円 4000
RadioButtonListコントロールのItemsプロパティ

 また、同じくRadioButtonListコントロールのAutoPostBackプロパティをTrueに設定する。AutoPostBackプロパティがFalseである場合には、ラジオボタンの選択を変更してもポストバックが発生せず、グリッド表が更新されないので注意すること。

4. GridViewコントロールにデータをバインドする

 最後に、GridViewコントロールに対してデータをバインドする。データ構成ウィザードの前半の設定は、ストアド・プロシージャを利用しない場合と変わるところはない。詳細は、「TIPS:[ASP.NET]GridViewコントロールでデータソースの内容を表示するには?」を参照していただきたい。次の表のように必要な情報を設定しておこう。

項目 設定値
データの種類 データベース
データソースID sds
データ接続の選択 MyDB(接続名)
データソース構成ウィザードの設定項目

 ストアド・プロシージャの結果をバインドする際に注目していただきたいのは、ウィザード(=[データソースの構成]ダイアログ)の次の画面の[Select ステートメントの構成]ページである。

[Select ステートメントの構成]ページ
以下の手順で設定する。
  [カスタム SQL ステートメントまたはストアド プロシージャを指定する]を選択。

 「TIPS:[ASP.NET]GridViewコントロールでデータソースの内容を表示するには?」のように、単純なSELECT命令を生成したい場合には、デフォルトの[テーブルまたはビューから列を指定します]を選択するが、ストアド・プロシージャを利用するには[カスタム SQL ステートメントまたはストアド プロシージャを指定する]を選択する必要がある。

 [次へ]ボタンをクリックすると、以下のようなページが表示されるので、[SELECT]タブから「ストアド プロシージャ」を選択したうえで、先ほど作成した「SelectProc」ストアド・プロシージャを指定する*1

*1 挿入や更新、削除処理が必要な場合には、同様に[INSERT][UPDATE][DELETE]タブで必要なストアド・プロシージャを指定する。ここではブランクで構わない。

[カスタム ステートメントまたはストアド プロシージャを定義します。]ページ
以下の手順で設定する。
  [SELECT]タブを開く。
  「ストアド プロシージャ」を選択。
  SelectProcストアド・プロシージャを指定。

 [次へ]ボタンをクリックすると、ストアド・プロシージャの動作に必要なパラメータを定義するための[パラメータの定義]ページが表示される。

[パラメータの定義]ページ

 ここでは、priceパラメータに対して、RadioButtonListコントロール「rdoExp」をひも付ける。これによって、RadioButtonListコントロールの選択値(SelectedValueプロパティ)がpriceパラメータに対してバインドされるわけだ。

 以上の手順を終えたら、さっそく、サンプルを実行してみよう。冒頭の画面のように、ラジオボタンの条件指定に従ってグリッド表のデータが絞り込み表示されれば成功である。End of Article

利用可能バージョン:.NET Framework 2.0
利用可能バージョン:.NET Framework 3.0
利用可能バージョン:.NET Framework 3.5
カテゴリ:Webフォーム 処理対象:GridViewコントロール
使用ライブラリ:GridViewコントロール
関連TIPS:[ASP.NET]GridViewコントロールでデータソースの内容を表示するには?

この記事と関連性の高い別の.NET TIPS
[ASP.NET]ストアド・プロシージャの出力パラメータをASP.NETページに反映させるには?
[ASP.NET]ストアド・プロシージャの戻り値をASP.NETページに反映させるには?
[ASP.NET]GridViewコントロールでデータソースの内容を表示するには?
[ASP.NET]GridViewコントロールの表示データを特定条件で絞り込むには?
[ASP.NET]データアクセス・コンポーネントを拡張するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間