我正在开发一个允许用户通过表单添加公司的应用程序。我很难在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")
提前致谢
答案 0 :(得分:-1)
这就是你不使用参数化查询所得到的
可能在一个或多个文本框或richtextbox中,撇号会导致字符串连接混淆所有内容。
假设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 Injection(这只是一个有启发性的链接,因为SQL注入是一个非常大的主题)
最后
永远不要使用字符串连接来构建SQL查询。