• ベストアンサー

SQL ServerのストアドでOUTPUTパラメータを2つ

VB.NETとSQL Serverでストアドプロシージャーを使用しています。 OUTPUTパラメータを2つ使用したいのですが、VB.NET側での受け取り方法がよくわかりません。 ご存知の方がいらっしゃいましたら、よろしくお願いします。

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

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

取得系ストアドの場合のサンプルです。 更新系ストアドの場合は http://www.microsoft.com/japan/msdn/columns/vbnet/vbnet09102002.asp を参考にしてください。 --サンプルストアド CREATE PROCEDURE ストアド --ALTER PROCEDURE ストアド @パラム1_VAR_I VARCHAR(12), @パラム2_INT_I INT, @パラム3_VAR_O VARCHAR(26) OUTPUT, @パラム4_INT_IO INT OUTPUT AS --パラメータ3を'aa' SET @パラム3_VAR_O = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' --パラメータ4を100倍 SET @パラム4_INT_IO = @パラム4_INT_IO * 100 --パラメータ1を返す SELECT @パラム1_VAR_I AS パラメータ1 --パラメータ2の10倍をステータスとして返す RETURN @パラム2_INT_I * 10 '標準ジュール[Module1.vb] Imports System.Data.SqlClient Module Module1   Sub Main()     Const DEF_ストアド名 As String = "ストアド"     'ユーザ名/パスワード/DB設定を修正してください     Dim l_sqlコネクション As SqlConnection = New SqlConnection("server=localhost;uid=ユーザ;pwd=パスワード;database=master")     Dim l_sqlコマンド As SqlCommand = New SqlCommand(DEF_ストアド名, l_sqlコネクション)     With l_sqlコマンド       'CommandTextの種別 = ストアド       .CommandType = CommandType.StoredProcedure       'パラメータ追加:戻り値       .Parameters.Add(パラメータ作成("@戻り値", SqlDbType.Int, 4, ParameterDirection.ReturnValue))       'パラメータ追加:引数(I/I/O/IO)       .Parameters.Add(パラメータ作成("@パラム1_VAR_I", SqlDbType.VarChar, 12, ParameterDirection.Input, "abcde"))       .Parameters.Add(パラメータ作成("@パラム2_INT_I", SqlDbType.Int, 4, ParameterDirection.Input, 2))       .Parameters.Add(パラメータ作成("@パラム3_VAR_O", SqlDbType.VarChar, 26, ParameterDirection.Output))       .Parameters.Add(パラメータ作成("@パラム4_INT_IO", SqlDbType.Int, 4, ParameterDirection.InputOutput, 3))     End With     'ストアド実行     Dim l_sqlアダプタ As New SqlDataAdapter(l_sqlコマンド)     Dim l_dstデータセット As New DataSet()     l_sqlアダプタ.Fill(l_dstデータセット)     '実行結果を出力     Dim i As Integer     Dim l_str結果 As String = ""     With l_sqlコマンド.Parameters       For i = 0 To .Count - 1         l_str結果 &= i & vbTab & .Item(i).ParameterName.ToString & vbTab & .Item(i).Value.ToString & vbCrLf       Next     End With     Call MsgBox(l_str結果, MsgBoxStyle.Information, "結果出力")   End Sub   'パラメータ作成関数   Private Function パラメータ作成( _           ByVal p_strパラメータ名 As String _           , ByVal p_dtpDBタイプ As System.Data.SqlDbType _           , ByVal p_intサイズ As Integer _           , ByVal p_pdrパラメータ種別 As System.Data.ParameterDirection _           , Optional ByVal p_obj初期値 As Object = Nothing _       ) As SqlParameter     Dim l_sqlパラメータ As New SqlParameter(p_strパラメータ名, p_dtpDBタイプ, p_intサイズ)     l_sqlパラメータ.Direction = p_pdrパラメータ種別     l_sqlパラメータ.Value = IIf((p_obj初期値 Is Nothing), vbNull.Variant, p_obj初期値)     Return l_sqlパラメータ   End Function End Module

cima2005
質問者

お礼

Item(i).Valueで値が取れるんですね。勉強になりました。 ソースも参考にさせていただきます。 ありがとうございました。

関連するQ&A