0

私は、ユーザーがフォームを介して会社を追加できるようにするアプリケーションに取り組んでいます。iaINSERTクエリでMySQLDBにデータを挿入するのに苦労しています。クエリは直接適用すると機能するので健全ですが、アプリケーションはコミットしません...以下に私のコードを示します...

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

           sqlconnection.Close()

Dim com As New MySqlCommand("INSERT INTO companies VALUES(company_id, '" & TextBox1.Text & "', '" & RichTextBox1.Text & "', '" & TextBox4.Text & "', '" & TextBox5.Text & "', '" & ComboBox6.Text & "', '" & TextBox2.Text & "', '" & TextBox7.Text & "', '" & TextBox3.Text & "', '" & ComboBox2.Text & "', '" & RichTextBox3.Text & "', '" & ComboBox5.Text & "', '" & RichTextBox2.Text & "', '" & ComboBox7.Text & "', '" & ComboBox1.Text & "', '" & ComboBox4.Text & "';", con)

        con.Open()

        com.ExecuteNonQuery()

        con.Close()

        MsgBox("committed")

前もって感謝します

4

1 に答える 1

-1

これは、パラメーター化されたクエリを使用しない場合に得られるものです。
おそらく、1つ以上のテキストボックスまたはリッチテキストボックスでアポストロフィを使用すると、文字列の連結によってすべてが混乱します。
TextBox1にが含まれているとします'Acme's Inc.'。これで、文字列クエリテキストは次のようになります。

INSERT INTO companies VALUES (company_id, 'Acme's Inc.', 
                                               ^

盲目的に文字列の連結によって引き起こされる構文エラーを参照してください。

わかりにくい名前のコントロールが非常に多いため、ここでコードを完全に置き換えることはできません。しかし、あなたはこのようなものを書くべきです

Dim cmdText = "INSERT INTO companies VALUES (@companyID, @param1, @param2, ....etc")
Dim com as New MySqlCommand(cmdText, con)
com.Parameters.AddWithValue("@companyID", company_id)
com.Parameters.AddWithValue("@param1", textbox1.Text)
.... 'and so on'
con.Open()
com.ExecuteNonQuery()

引用符の問題とは別に、基盤となるデータベースシステムの日付と10進数の正しい表現には、別の大きな問題があります。SQLインジェクション(SQLインジェクションは非常に大きなトピックであるため、これは単なる有益なリンクです)

だから最後に

SQLクエリを作成するために文字列連結を使用しないでください。

于 2013-02-05T14:43:40.257 に答える