ストアドでのパラメーター受け渡し
Dim cn As SqlClient.SqlConnection
Sub a()
Dim cmd As New SqlClient.SqlCommand
Try
Dim strSQL As String = “stTest”
cmd.Connection = cn
cmd.CommandText = strSQL
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Clear()
‘Return Value
cmd.Parameters.Add(“@Ret”, SqlDbType.Int).Direction = ParameterDirection.ReturnValue
‘入力パラメーター Input Parameters
cmd.Parameters.Add(“@ID”, SqlDbType.Int).Value = 1
cmd.Parameters.Add(“@a1”, SqlDbType.NVarChar).Value = “A”
cmd.Parameters.Add(“@a2”, SqlDbType.Decimal).Value = 1.52D
‘出力パラメーター Output Parameters
cmd.Parameters.Add(“@b1”, SqlDbType.Int).Direction = ParameterDirection.Output
‘Decimal型の出力パラメーターはPrecision(最大桁数)とScale(小数部桁数)の指定が必要.欄外の※も参照.
cmd.Parameters.Add(“@b2”, SqlDbType.Decimal).Direction = ParameterDirection.Output
cmd.Parameters(“@b2”).Precision = 4
cmd.Parameters(“@b2”).Scale = 2
Dim res As Integer = cmd.ExecuteNonQuery() ‘ストアド実行
If CInt(cmd.Parameters(“@Ret”).Value) = 1 Then
If Not IsDBNull(cmd.Parameters(“@b1”).Value) Then
Dim b1 As Integer = CInt(cmd.Parameters(“@b1”).Value)
‘コード
End If
End If
Finally
cmd.Dispose()
End Try
End Sub
Updated:
2010-10-23 Decimal型の例を追加.
※ Decimal型のPrecision(最大桁数)とScale(小数部桁数)の指定は入力パラメーターでは不要だが出力パラメーターでは必要.
ややこしいことに,Excel VBAでは,入力パラメーター・出力パラメーターどちらにも必要.