.NET TIPS

[ASP.NET]ストアド・プロシージャの戻り値をASP.NETページに反映させるには?[2.0、3.0、3.5、C#、VB]

山田 祥寛
2009/04/23

 「TIPS:[ASP.NET]ストアド・プロシージャの出力パラメータをASP.NETページに反映させるには?」で紹介したように、ストアド・プロシージャではその処理結果を出力パラメータとして呼び出し元に返すことができる。しかし、呼び出し元に返したい値が1つで、かつ、それが整数型(INT値)である場合には、(出力パラメータではなく)戻り値を利用することも可能だ。

 本稿では、前述のTIPSのサンプルを、戻り値を使った例で書き換えてみよう。

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

 前述のTIPSで定義済みのストアド・プロシージャSelectProcに対して、以下の要領でコードを修正する。

ALTER 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
  RETURN @@ROWCOUNT
SelectProcストアド・プロシージャのコード

 戻り値を返すのは、RETURN命令の役割だ。ここでは、前述のTIPS同様、システム関数@@ROWCOUNTで直近のSQL命令による取得件数を戻り値として返している。

2. データソース・コントロールのパラメータを修正する

 ストアド・プロシージャからの戻り値を受け取るには、出力パラメータのときと同様、データソース・コントロール(SqlDataSourceコントロール)にも明示的にパラメータ定義を追加しておく必要がある。

 ただし、戻り値パラメータは(なぜか)データソース構成ウィザードからでは自動では認識できないようで、手動での設定が必要だ。これにはまず、プロパティ・ウィンドウからSelectQueryプロパティを選択し、右端の[...]ボタンをクリックする。

[コマンドおよびパラメータのエディタ]ダイアログ

 [コマンドおよびパラメータのエディタ]ダイアログが起動するので、ここで[パラメータを最新の情報に更新する]ボタンをクリックする。すると、新たに「RETURN_VALUE」という名前のパラメータが追加されることが確認できるはずだ。これが戻り値を受け取るためのパラメータである。なお、不要になった出力パラメータ「result」は自動では削除されないので、[パラメータ]欄で削除しておこう。

 次に、[詳細設定パラメータの表示]リンクをクリックし、プロパティ・グリッドを表示する。Directionプロパティが「ReturnValue」、Typeプロパティが「Int32」になっていれば、RETURN_VALUEパラメータは確かに戻り値パラメータとして認識されている。

3. 戻り値パラメータの値を取得する

 あとは、ストアド・プロシージャから取得した戻り値をLiteralコントロールに反映させるだけだ。前述のTIPSで定義済みのSelectedイベント・ハンドラを以下リストの要領で書き換えてほしい(書き換え部分は太字)。

protected void sds_Selected(Object sender, SqlDataSourceStatusEventArgs e) {
  ltrResult.Text = String.Format("{0}件が合致しました。",
                     e.Command.Parameters["@RETURN_VALUE"].Value);
}
Protected Sub sds_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs)
  ltrResult.Text = String.Format("{0}件が合致しました。", _
                     e.Command.Parameters("@RETURN_VALUE").Value)
End Sub
戻り値パラメータを取得するためのイベント・ハンドラ(Stored_cs.aspx。上がC#、下がVisual Basic)

 取得するパラメータの名前を、戻り値パラメータを表す「@RETURN_VALUE」に変更するだけだ。これによってストアド・プロシージャから返された戻り値を取得し、その値をLiteralコントロールに反映している。

 以上を理解できたら、修正したStored.aspxを実行してみよう。

修正したStored.aspxの実行結果
ストアド・プロシージャからの戻り値(条件に合致したレコード数)が正しくLiteralコントロールに表示されている。

 上の画面のように、グリッド表に表示されたレコード件数がLiteralコントロール上にも反映されていれば、戻り値パラメータは正しく取得できている。End of Article

利用可能バージョン:.NET Framework 2.0
利用可能バージョン:.NET Framework 3.0
利用可能バージョン:.NET Framework 3.5
カテゴリ:Webフォーム 処理対象:GridViewコントロール
使用ライブラリ:GridViewコントロール
関連TIPS:TIPS:[ASP.NET]ストアド・プロシージャの出力パラメータをASP.NETページに反映させるには?

この記事と関連性の高い別の.NET TIPS
[ASP.NET]ストアド・プロシージャの出力パラメータをASP.NETページに反映させるには?
[ASP.NET]GridViewコントロールにストアド・プロシージャの結果を反映させるには?
[ASP.NET]GridViewコントロールの表示データを特定条件で絞り込むには?
[ASP.NET MVC]ルート定義を追加するには?
[ASP.NET]GridViewコントロールでデータソースの内容を表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム 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メールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH