2021年12月24日金曜日

VB.NETでSQL SERVERのSP(ストアドプロシージャ)からRETURN値を受け取る

 SQL SERVERを使ったプログラムを相当作っていたのだが、SPが返すRETURN値を受け取る方法を知らなかった。今回、初めて知ったのでメモ。

        Dim rc As Integer = 0 ' RETURN値
        Using connection As New SqlClient.SqlConnection(My.Settings.kntnkConnectionString)
            ' コネクションを開く
            connection.Open()
            'コマンドをコネクションから作成する
            Dim command As SqlClient.SqlCommand = connection.CreateCommand
            Try
                ' #ストアドプロシージャを実行する
                With command
                    ' SQLサーバーのタイムアウト時間
                    .CommandTimeout = 60
                    ' 実行するストアドプロシージャ名を指定
                    .CommandText = "SE050_対象品番抽出"
                    ' ストアドプロシージャのパラメータを設定
                    ' commandオブジェクトのパラメータを初期化する
                    .Parameters.Clear()
                    .Parameters.Add("@UserID", SqlDbType.VarChar).Value = G_UserID
                    .Parameters.Add("ReturnValue", System.Data.SqlDbType.Int)
                    .Parameters("ReturnValue").Direction = System.Data.ParameterDirection.ReturnValue

                    ' コマンドの種類をストアドに変更
                    .CommandType = CommandType.StoredProcedure
                    ' コマンド実行
                    .ExecuteNonQuery()
                    rc = CInt(.Parameters("ReturnValue").Value)

                    Debug.WriteLine("SE050_対象品番抽出 returnValue=" & rc.ToString)
                End With
            Catch ex As Exception
                QueriesTableAdapter.InsertQuery_TK_SYSLOG("", "", "SE050K01_原材料未登録部品登録", ex.Message & vbCrLf & GetCurrentLineNumber.ToString & "行目を実行中", G_UserID)
                MsgBox(ex.Message)
            End Try
            'コネクションを閉じる
            connection.Close()
        End Using