- ベストアンサー
SQL ServerのストアドでOUTPUTパラメータを2つ
VB.NETとSQL Serverでストアドプロシージャーを使用しています。 OUTPUTパラメータを2つ使用したいのですが、VB.NET側での受け取り方法がよくわかりません。 ご存知の方がいらっしゃいましたら、よろしくお願いします。
- みんなの回答 (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
お礼
Item(i).Valueで値が取れるんですね。勉強になりました。 ソースも参考にさせていただきます。 ありがとうございました。