• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ストアドプロシージャの戻り値が取得できない)

ストアドプロシージャの戻り値が取得できない

このQ&Aのポイント
  • ストアドプロシージャ内でSelectとUpdateを行い、設定した戻り値をリターンしたいのですが。ついでにSelectとした複数行の結果の読み込みもしたいのです。
  • 上記でSelectした結果をreaderA("カラム名")で読み取れているのですが、戻り値Aの値が取得できていません。ウォッチ式でcmd.Parameters("A").Valueを見るとNothingになっています。また、違うストアドでは戻り値を取得できているのでストアドに問題があるかもしれません。
  • 環境はvb.net、SQLServer2005です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>OUTPUTとreturnの区別は理解して作れているはずです。 確かに、、、 PROCEDUREを見る限り、VB側は間違いがなさそう。。。。 であれば、PROCEDUREの中の出力値を疑って見ます。 「SQL Server Management Studio」で DECLARE @Result INTEGER EXECUTE @Result = SP名 PRINT @Result とやって、@Resultの結果はどうなりますか?

jam-best
質問者

お礼

Management Studioで単体でSPを動かすと返してほしい値を返してくれるんです。。 そこが難点でした。じゃあvb側が悪いのか。調べる限りそんな感じもない。。 と悩みながらデバッグでウォッチ式見ていましたら。 cmdをcloseした箇所でnothingだったものが戻り値を表示しました。 cmdにselectした結果の情報が入っている場合はcloseしてからでないと、OUTPUTやreturn値は見れない んですかね。 解決策になっているのかわかりませんが、とりあえずOKとしときます。 ありがとうございます。

その他の回答 (3)

  • Hardking
  • ベストアンサー率45% (73/160)
回答No.4

戻り値が欲しいなら、プロシジャーではなくファンクションなのでは。 CREATE PROCEDURE ↓ CREATE FUNCTION ※FUNCTIONだけに対して、遵守する義務のあるRETURNS節を特定することができます。

回答No.2

PROCEDURE「SP名」が、どのように作成しているのかわからないので何とも言えませんが、、、 [Output]と[ReturnValue]の違いのような気がします。 [仮にこういうプロシージャの時] ALTER PROCEDURE SP名 ( (スペース)@A AS INTEGER OUTPUT ) AS BEGIN (スペース)SET @A = 999; --// ← これはOUTPUT (スペース)RETURN 30; --// ← これはReturnValue END [VB側] cmd.CommandType = Data.CommandType.StoredProcedure cmd.CommandText = "SP名" cmd.Parameters.Add("@A", System.Data.SqlDbType.Int) cmd.Parameters("@A").Direction = System.Data.ParameterDirection.Output cmd.Parameters.Add("@BBBB", System.Data.SqlDbType.Int) cmd.Parameters("@BBBB").Direction = System.Data.ParameterDirection.ReturnValue readerA = cmd.ExecuteReader() MsgBox(cmd.Parameters("@A").Value) MsgBox(cmd.Parameters("@BBBB").Value) http://okwave.jp/qa/q1648176.html

jam-best
質問者

補足

回答ありがとうございます。 ソースのほうをReturnValueにしているのでストアドの方もしっかりリターンしています。 OUTPUTとreturnの区別は理解して作れているはずです。 簡単に記載すると下記の感じです。 CREATE PROCEDURE SP名 AS BEGIN DECLARE @A INT SLECT文 UPDATE文 SET @A = 1 return @A try catchもしているのでなにかしらは返すはずなのです。 取得できるストアドもあるというのが。ん~・・・

  • Hardking
  • ベストアンサー率45% (73/160)
回答No.1

1.対象テーブルに該当データはあるんですか? 2.カラムAのデータ属性はInt型ですが ストアードの戻り値はInt型でしょうか?

jam-best
質問者

補足

回答ありがとうございます。 >1.対象テーブルに該当データはあるんですか? データはあります。 >2.カラムAのデータ属性はInt型ですが ストアードの戻り値はInt型でしょうか? ソースの方もストアドの方もIntで宣言しています。 ↑には書いてませんが念のためCIntでキャストもしてます。