12

VB のテキスト ボックス内のデータから SQL データベースを更新するためのこのコードがあります。テキストに目盛り '、または引用符 ," などが含まれている場合は、パラメーターを使用する必要があります。これが私が持っているものです:

dbConn = New SqlConnection("server=.\SQLEXPRESS;Integrated Security=SSPI; database=FATP")
    dbConn.Open()

    MyCommand = New SqlCommand("UPDATE SeansMessage SET Message = '" & TicBoxText.Text & _
                                            "'WHERE Number = 1", dbConn)

    MyDataReader = MyCommand.ExecuteReader()
    MyDataReader.Close()
    dbConn.Close()

そして、これは私がウェブで見たものからパラメータを設定しようとする私の不自由な試みであり、私はそれをよく理解していません.

dbConn = New SqlConnection("server=.\SQLEXPRESS;Integrated Security=SSPI; database=FATP")
    dbConn.Open()

    MyCommand = New SqlCommand("UPDATE SeansMessage SET Message = @'" & TicBoxText.Text & _
                                            "'WHERE Number = 1", dbConn)

    MyDataReader = MyCommand.ExecuteReader()
    MyDataReader.Close()
    dbConn.Close()

これどうやってやるの?コードを実行したときにテキスト ボックスに ' マークがあると、クラッシュします。

4

2 に答える 2

29

Bobby Tablesを回避するための正しい道を進んでいますが、パラメーターの理解@は不完全です。

名前付きパラメーターは、プログラミング言語の変数のように動作します。最初に SQL コマンドで使用し、VB.NET または C# プログラムで次のように値を指定します。

MyCommand = New SqlCommand("UPDATE SeansMessage SET Message = @TicBoxText WHERE Number = 1", dbConn)
MyCommand.Parameters.AddWithValue("@TicBoxText", TicBoxText.Text)

コマンドのテキストが自己完結型になったことに注意してください。テキスト ボックスのテキストの値に依存しなくなったため、ユーザーが独自のコマンドを挿入して SQL を壊すことはできません。@TicBoxTextコマンドのテキスト内の値を表す変数の名前になりました。への呼び出しがAddWithValue値を提供します。その後、ExecuteReader準備は完了です。

于 2012-06-21T14:03:57.463 に答える
12

ここにはいくつかの改善点があります。

Using dbConn As New SqlConnection("server=.\SQLEXPRESS;Integrated Security=SSPI; database=FATP"), _
      MyCommand As SqlCommand("UPDATE SeansMessage SET Message = @Message WHERE Number = 1", dbConn)

    'Make sure to use your exact DbType (ie: VarChar vs NVarChar) and size
    MyCommand.Parameters.Add("@Message", SqlDbType.VarChar).Value = TicBoxText.Text

    dbConn.Open()
    MyCommand.ExecuteNonQuery() ' don't open a data reader: just use ExecuteNonQuery
End Using 'Using block will close the connection for you
于 2012-06-21T14:07:55.417 に答える