.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」の部分は使用しているデータベースによって異なる)。
コード・エディタにストアド・プロシージャの骨格が生成されるので、これを以下リストのように修正する。
|
|
ストアド・プロシージャ「SelectProc」の定義 |
ストアド・プロシージャを作成するのは、CREATE PROCEDURE命令の役割だ。CREATE PROCEDURE命令の一般的な構文は次のとおりである。
|
|
CREATE PROCEDURE命令の一般的な構文 |
つまり、先ほどのリストではINT型の@priceパラメータを受け取る「SelectProc」という名前のプロシージャを定義しているわけだ。続いて、プロシージャの本体であるAS句配下のコードを見ていこう。
ストアド・プロシージャでは、条件分岐や繰り返し処理、例外処理などをVisual Basicに比較的似た構文で記述できる。ここでは条件分岐構文のIF...ELSE命令を使って、パラメータ@priceの値が0以下であるかどうかを判定し、0以下である場合にはすべてのレコードを、0より大きい場合には「@price - 1000以上、@price未満」のレコードのみを、それぞれbookテーブルから取り出している。
IF...ELSE命令の一般的な構文は、次のとおり。
|
|
ストアド・プロシージャの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コントロールの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 ステートメントの構成]ページ | |||
以下の手順で設定する。 | |||
|
「TIPS:[ASP.NET]GridViewコントロールでデータソースの内容を表示するには?」のように、単純なSELECT命令を生成したい場合には、デフォルトの[テーブルまたはビューから列を指定します]を選択するが、ストアド・プロシージャを利用するには[カスタム SQL ステートメントまたはストアド プロシージャを指定する]を選択する必要がある。
[次へ]ボタンをクリックすると、以下のようなページが表示されるので、[SELECT]タブから「ストアド プロシージャ」を選択したうえで、先ほど作成した「SelectProc」ストアド・プロシージャを指定する*1。
*1 挿入や更新、削除処理が必要な場合には、同様に[INSERT][UPDATE][DELETE]タブで必要なストアド・プロシージャを指定する。ここではブランクで構わない。 |
[カスタム ステートメントまたはストアド プロシージャを定義します。]ページ | |||||||||
以下の手順で設定する。 | |||||||||
|
[次へ]ボタンをクリックすると、ストアド・プロシージャの動作に必要なパラメータを定義するための[パラメータの定義]ページが表示される。
[パラメータの定義]ページ |
ここでは、priceパラメータに対して、RadioButtonListコントロール「rdoExp」をひも付ける。これによって、RadioButtonListコントロールの選択値(SelectedValueプロパティ)がpriceパラメータに対してバインドされるわけだ。
以上の手順を終えたら、さっそく、サンプルを実行してみよう。冒頭の画面のように、ラジオボタンの条件指定に従ってグリッド表のデータが絞り込み表示されれば成功である。
利用可能バージョン:.NET Framework 2.0 利用可能バージョン:.NET Framework 3.0 利用可能バージョン:.NET Framework 3.5 カテゴリ:Webフォーム 処理対象:GridViewコントロール 使用ライブラリ:GridViewコントロール 関連TIPS:[ASP.NET]GridViewコントロールでデータソースの内容を表示するには? |
「.NET TIPS」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|