如何解决 vb.net 中的这个 SQL 语法错误?

Posted

技术标签:

【中文标题】如何解决 vb.net 中的这个 SQL 语法错误?【英文标题】:How to solve this SQL syntax error in vb.net? 【发布时间】:2019-11-09 10:43:31 【问题描述】:

我不知道如何解决这个错误。请帮我解决这个问题!

Dim Command As mysqlCommand
Dim reader As MySqlDataReader
Dim query As String

query = "INSERT into fishshop.recordsale (name,itemuse,description,price,qty,total,amount,change) values('" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox5.Text & "','" & TextBox4.Text & "','" & TextBox6.Text & "','" & TextBox7.Text & "','" & TextBox9.Text & "','" & TextBox10.Text & "')"
Command = New MySqlCommand(query, Moduleconn.conn)
reader = Command.ExecuteReader
MsgBox("transaction Successfuly Saved", MsgBoxStyle.Information, "Message")
conn.Close()

错误图片:

【问题讨论】:

学习使用参数!这可能会消除您现在遇到的问题。 您创建了数据库吗? price、qty、total、amount、change 是什么数据类型?你真的需要存钱找零吗? 【参考方案1】:

change 是 MySql 的 reserved word。 您必须在它周围使用反引号才能在语句中使用它:

INSERT .....(..., `change`) VALUES .....

此外,如果 changetotal 列是数字列,请先从 TextBoxes 文本中删除 ,,然后再将它们保存到表中。

【讨论】:

【参考方案2】:

让您的数据库对象保持在本地,这样您就可以控制它们是否被关闭和处置。 Using...End 即使出现错误,使用块也会为您解决这个问题。

读取器用于检索数据。要插入、更新或删除数据,请使用 .ExecuteNonQuery

使用Parameters 来避免Sql Injection。这非常重要,因为恶意用户可能会破坏您的数据库。参数只是服务器认为的值,而不是用户可以在文本框中输入的 Drop table 等可执行代码。

您必须打开一个连接才能使用它。 (DataAdapter 不是这样,它会为您打开和关闭它)始终在可能的最后一秒打开连接(就在 .Execute 之前)并尽快关闭它(始终在消息框之前。)

Private Sub Insert()
    Using conn As New MySqlConnection("Your connection string."),
            Command As New MySqlCommand("Inset Into fishshop.recordsale (name,itemuse,description,price,qty,total) values(@name,@itemuse,@description,@price,@qty,@total)", conn)
        With Command.Parameters
            .Add("@name", MySqlDbType.String, 50).Value = TextBox2.Text
            .Add("@itemuse", MySqlDbType.String, 50).Value = TextBox3.Text
            .Add("@description", MySqlDbType.String, 50).Value = TextBox5.Text
            .Add("@price", MySqlDbType.Decimal).Value = CDec(TextBox4.Text)
            .Add("@qty", MySqlDbType.Int32).Value = CInt(TextBox6.Text)
            .Add("@total", MySqlDbType.Decimal).Value = CDec(TextBox7.Text)
        End With
        conn.Open()
        Command.ExecuteNonQuery()
    End Using 'closes and disposes connection and command
    MsgBox("transaction Successfuly Saved", MsgBoxStyle.Information, "Message")
End Sub

【讨论】:

以上是关于如何解决 vb.net 中的这个 SQL 语法错误?的主要内容,如果未能解决你的问题,请参考以下文章

SQL插入语句语法错误VB.net

如何解决 vb.net 应用程序中的 mysql 定义错误?

更新语句中的 VB.NET 语法错误

“INSERT INTO 语句中的语法错误”错误 - 错误是啥?

VB.Net 中的 SQL 语句错误

“INSERT INTO 中的语法错误”ms-access vb.net [重复]