0

我正在开发一个允许用户通过表单添加公司的应用程序。ia 在 INSERT 查询中努力将数据插入 MySQL 数据库。查询是合理的,因为它在直接应用时会起作用,但是应用程序不会提交......这是我下面的代码......

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

这就是你不使用参数化查询所得到的。
可能在您的一个或多个文本框或丰富文本框中,撇号会导致您的字符串连接混淆所有内容。
假设 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()

除了引用问题,正确表示底层数据库系统的日期和十进制数字还有另一个大问题。SQL 注入(这只是一个指导性链接,因为 SQL 注入是一个非常大的话题)

所以最后

切勿使用字符串连接来构建 SQL 查询。

于 2013-02-05T14:43:40.257 回答