.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 AJAX]DynamicPopulateコントロールでXML Webサービスを非同期に呼び出すには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH