System.Data.SqlClient.SqlException: '''附近的语法不正确'。 / cmd.ExecuteNonQuery()

System.Data.SqlClient.SqlException: 'Incorrect syntax near ')'.' / cmd.ExecuteNonQuery()

提问人:Muhammad Rafif Rais 提问时间:11/9/2022 最后编辑:CraigMuhammad Rafif Rais 更新时间:11/10/2022 访问量:30

问:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If NamaBukuBox.Text = " " Or PngrngBukuBox.Text = " " Or PnrbtBukuBox.Text = " " Or JmlhBukuBox.Text = " " Then
        MsgBox("Isi Semua Kolom Informasi")
    Else
        Con.Open()
        Dim query = "Insert into BukuTbl values('" & NamaBukuBox.Text & "','" & PngrngBukuBox.Text & "','" & PnrbtBukuBox.Text & "'," & JmlhBukuBox.Text & ")"
        Dim cmd As SqlCommand
        cmd = New SqlCommand(query, Con)
        cmd.ExecuteNonQuery() '** this line is error
        MsgBox("Buku Telah Ditambahkan")
        Con.Close()
    End If
End Sub

我不知道该怎么办 是什么导致了错误以及如何解决它?

SQL vb.net System.Data.SqlClient

评论

1赞 Hans Kesting 11/9/2022
了解如何通过参数传递值,那么您的问题可能会消失。这到底有什么价值?query
1赞 Serg 11/9/2022
错误是什么?
2赞 jmcilhinney 11/9/2022
当人们发布他们的 SQL 代码中的语法错误,然后懒得发布 SQL 代码时,这总是令人沮丧的。这通常意味着他们甚至没有看过自己。生成 SQL 代码的 VB 代码不是 SQL 代码。如果我们知道实际的代码是什么,那么我们可以告诉你它有什么问题。也就是说,如果您按照建议以正确的方式做事并使用参数,那么问题可能会消失。到处都是相关信息,但你可以在这里看到我的看法。

答:

1赞 navigator 11/9/2022 #1

这是一种非常危险的代码编写方式。用户输入将直接插入到 SQL 中。如果用户输入任何撇号,则 SQL 将失败。

例如,尝试在 NamaBukuBox 文本框中输入 Abc's。检查生成的 SQL。在最坏的情况下,用户可以注入 SQL 并删除数据和表。

在您的情况下,很可能是用户的输入导致 SQL 失败。请使用参数将用户数据输入到 SQL 中。不要在 SQL 中直接连接用户输入。您的 SQL 应如下所示:

Insert into BukuTbl values(@NamaBukuBox,@PngrngBukuBox,@PnrbtBukuBox,@JmlhBukuBox)

评论

0赞 Craig 11/10/2022
问题比潜在的故障更大,另请参阅“SQL 注入”。这上面有一个 xkcd,搜索“Bobby Tables”。
0赞 navigator 11/10/2022
@Craig:是的,这就是我提到SQL注入的原因。