VB.NETでのストアドプロシージャの戻り値取得について。
投稿者 まる  (社会人)
投稿日時
2009/2/6 01:48:32
select count (*) from MSTokuisaki
はミスです・・・。
select @count = count (*) from MSTokuisaki
の間違いでした。
はミスです・・・。
select @count = count (*) from MSTokuisaki
の間違いでした。
投稿者 nakaP  (社会人)
投稿日時
2009/2/6 02:49:53
はじめまして。
別途SqlParameterオブジェクトを用意し、DirectionプロパティをOutputに指定してやってみてはどうでしょうか。
別途SqlParameterオブジェクトを用意し、DirectionプロパティをOutputに指定してやってみてはどうでしょうか。
投稿者 まる  (社会人)
投稿日時
2009/2/7 01:37:07
nakaPさん、はじめまして。回答ありがとうございます。
outputにしても結果は同じでした。
試行錯誤を繰り返していたらできてしまいました・・・。
質問をしたのにすみませんでした・・・。
こうなりました・・・。
'戻り値を受け取るために実行する("Return"の文字は何でもいい)
command.Parameters.Add("Return", SqlDbType.Decimal)
'戻り値の値を入れる
command.Parameters("Return").Direction = ParameterDirection.ReturnValue
'Connectionオブジェクトでコマンドを実行して、影響を受けた行の数を返す
command.ExecuteNonQuery()
'型変換して代入
max = CType(command.Parameters("Return").Value, Decimal)
outputにしても結果は同じでした。
試行錯誤を繰り返していたらできてしまいました・・・。
質問をしたのにすみませんでした・・・。
こうなりました・・・。
'戻り値を受け取るために実行する("Return"の文字は何でもいい)
command.Parameters.Add("Return", SqlDbType.Decimal)
'戻り値の値を入れる
command.Parameters("Return").Direction = ParameterDirection.ReturnValue
'Connectionオブジェクトでコマンドを実行して、影響を受けた行の数を返す
command.ExecuteNonQuery()
'型変換して代入
max = CType(command.Parameters("Return").Value, Decimal)
投稿者 nakaP  (社会人)
投稿日時
2009/2/7 02:56:54
すいません、最初のストアドのパラメタはコメントアウトされてたんですね。見落としてました。
で、少し気になったんですが、
>declare @count int
となっているのに
>command.Parameters.Add("Return", SqlDbType.Decimal)
としているのは、型が違うとなるんじゃないでしょうか。
あとはSqlParameterクラスのプロパティを調査してみるとか。
で、少し気になったんですが、
>declare @count int
となっているのに
>command.Parameters.Add("Return", SqlDbType.Decimal)
としているのは、型が違うとなるんじゃないでしょうか。
あとはSqlParameterクラスのプロパティを調査してみるとか。
投稿者 まる  (社会人)
投稿日時
2009/2/16 18:31:59
nakaPさん、お返事ありがとうございます。遅れてすみませんでした。
変数が違うのは自分のミスなのですぐ修正しました。
プロパティで参照ですね、試してみます。nakaPさん、本当にありがとうございました。
変数が違うのは自分のミスなのですぐ修正しました。
プロパティで参照ですね、試してみます。nakaPさん、本当にありがとうございました。
今VB.NET(ver.2005)でADO.NETをやっています。
全然やったことがなかったのでほとんどわかりません・・・。
今自分が悩んでいるところは「ストアドプロシージャからの戻り値の取得」です。
一応プログラムを作成してみたのはいいものの、ストアドプロシージャの結果とVBの渡された値に違いがあって意味がわかりません・・・。
わかる方がいましたら、ご教授お願いいたします。
今の状態ですと、レコード数が「32」あるのに、VB.NETだと「6」と表示されます・・・。
ストアドプロシージャ
----------------------------------------------
ALTER PROCEDURE dbo.SpMsTokuisakiCount
/*
(
@count int output
)
*/
AS
SET NOCOUNT ON
declare @count int
select count (*) from MSTokuisaki
RETURN @count
---------------------------------------------
VB.NET
---------------------------------------------
Public Function test() As Decimal
Dim cn As SqlClient.SqlConnection
Dim max As New SqlClient.SqlParameter
'SQLに対してコマンドを入れるための変数
Dim command As New SqlClient.SqlCommand
'コネクションの指定
command.Connection = cn
'コマンドの種類をストアドプロシージャに
command.CommandType = CommandType.StoredProcedure
'実行するストアドプロシージャの名前を指定
command.CommandText = "SpMsTokuisakiCount"
command.Parameters.Clear()
command.Parameters.Add("RETURN_VALUE", SqlDbType.Decimal)
max.Direction = ParameterDirection.ReturnValue
Return max.Direction
End Function
---------------------------------------------