パラメータを指定して、SQL文を作成する SqlParameter クラスを説明します。

置き換える変数は、@から始まる文字列で記述します。

SqlParameter に変数と値を設定します。

SqlParameter を省略して、SqlCommand.Parameters に直接 SqlCommand.Parameters に変数と値を設定することもできます。

パラメータで、SQL作成し実行する

Dim builder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder()
builder.DataSource = ".\SQLEXPRESS"
builder.AttachDBFilename = "D:\DB\TestDB.mdf"
builder.IntegratedSecurity = True
builder.UserInstance = True
builder.MultipleActiveResultSets = True
Dim ConnectString As String = builder.ToString()

Using sqlConnect As New SqlConnection(ConnectString)
    sqlConnect.Open()

    Dim sqlStr As String = "INSERT INTO Table_1 (Item1,Item2) VALUES (@Item1,@Item2)"

    Dim command As SqlCommand = New SqlCommand(sqlStr, sqlConnect)

    Dim val As String = "AAAAA"
    Dim p1 As SqlParameter = New SqlParameter("@Item1", val)
    command.Parameters.Add(p1)

    'SqlParameter省略追加
    command.Parameters.Add("@Item2", SqlDbType.Char).Value = "XXXX2"

    command.ExecuteNonQuery()

End Using

※上記の文でvalの変数の部分を直接数値を設定することができますが、Stringの場合直接設定するとうまく置き換えすることができなくなります。

 

エスケープ処理

Parameters を使用する場合、エスケープ処理をする必要がありません。

使用しない場合は、値のエスケープ処理を行わないとエラーとなります。

Public Function ValueEscape(str As String) As String
    Dim sb As New System.Text.StringBuilder(str)

    sb.Replace("'", "''")
    sb.Replace(",", ",,")
    sb.Replace(Chr(&H09), "\" & Chr(&H09))           'TAB
    sb.Replace(Chr(&H13), "\" & Chr(&H13))           'CR
    sb.Replace(Chr(&H00), "\" & Chr(&H00))           'LF

    Return sb.ToString()
End Function