TIL

Today I Leaned. 仕事で知ったことや、つまづいたことを時間のある時にメモしておく

SqlCommand.Parameters.Addで設定する値の型について - VB.NET

Object型でも行けた

ということはDBNull.Value(Object型)を返すメソッドが使えるということ

Dim val1 as Object = "hello"
sqlCmd.Parameters.Add("@PARAM1", SqlDbType.Char).Value = val1
sqlCmd.Parameters.Add("@PARAM2", SqlDbType.Int).Value = val2

例えば、テーブル1から取得したデータをテーブル2に入れるときとかに有効的かも

' Dim sqlReader1 as SqlDataReader ' テーブル1の結果が格納

' Dim sqlCmd2 as SqlCommand ' テーブル2のステートメント

sqlCmd2.Parameters.Add("@param1", SqlDbType.Char).Value = GetStringSqlReader(sqlReader1, 0)
''' <summary>
''' Stringを取得する(NULL値の場合、Nothingを返す)
''' </summary>
''' <param name="sqlReader">値を取得するSqlDataReader</param>
''' <param name="idx">結果のインデックス番号</param>
''' <returns>String(NULL値の場合、空文字を返す)</returns>
Public Function GetStringSqlReader(ByRef sqlReader As SqlDataReader, ByVal idx As Integer) As Object

    ' 結果がNULLの場合、DBNull.Value を返し、NULLではない場合、結果を返す
    If sqlReader.IsDBNull(idx) Then
        Return DBNull.Value
    Else
        Return sqlReader.GetString(idx).Trim()
    End If

End Function