命令错误*'附近的语法不正确,' *

时间:2015-04-20 15:16:30

标签: sql-server-2008-r2 vb.net-2010

 Dim Query As String
 Dim con As SqlConnection = New SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=Minimarket;Integrated Security=True")
        Query = "INSERT INTO Barang(kode_bar,kode_kat,nama_bar,satuan, hbeli, hjual, stok, expired)VALUES("
        Query = Query + txtkodebar.Text + ",'" + cmbkodekat.Text + "','" + txtnamabar.Text + "','" + txtsatuan.Text + "','" + txthbeli.Text + "','" + txthjual.Text + "','" + txtstok.Text + "','" + Format(dtpex.Text, "yyyy-MM-dd HH:mm:ss") + "'"
        con.Open()
        Dim cmd As SqlCommand = New SqlCommand(Query, con)
        Dim i As Integer = cmd.ExecuteNonQuery()
        If (i > 0) Then
            MessageBox.Show("Data berhasil disimpan")
        Else
            MessageBox.Show("Data gagal disimpan")
        End If
        con.Close()

*有人可以帮助我吗?当我按下按钮保存时,错误的语法不正确,','在cmd.executenonquery中。我现在要做什么?我放弃了:'(*

3 个答案:

答案 0 :(得分:0)

你错过了过期之间的空格)和VALUES,你也缺少txtkodebar.Text周围的引号,见下面更正的代码:

 Dim Query As String
 Dim con As SqlConnection = New SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=Minimarket;Integrated Security=True")
    Query = "INSERT INTO Barang(kode_bar,kode_kat,nama_bar,satuan, hbeli, hjual, stok, expired) VALUES("
    Query = Query + "'" + txtkodebar.Text + "','" + cmbkodekat.Text + "','" + txtnamabar.Text + "','" + txtsatuan.Text + "','" + txthbeli.Text + "','" + txthjual.Text + "','" + txtstok.Text + "','" + Format(dtpex.Text, "yyyy-MM-dd HH:mm:ss") + "')"
    con.Open()
    Dim cmd As SqlCommand = New SqlCommand(Query, con)
    Dim i As Integer = cmd.ExecuteNonQuery()
    If (i > 0) Then
        MessageBox.Show("Data berhasil disimpan")
    Else
        MessageBox.Show("Data gagal disimpan")
    End If
    con.Close()

正如@GarethD所述,您还应该阅读参数化查询,因为您当前的查询容易受到SQL注入攻击。

答案 1 :(得分:0)

您收到该错误的原因是您的查询的这一部分:

Query = Query + txtkodebar.Text + ",'"

这导致txtkodebar.Text周围没有引号。您可以通过将其更改为:

来解决此问题
Query = Query + "'" + txtkodebar.Text + "','"

但更好的解决方法是使用参数化查询,这不仅会使此查询更不容易出错,而且还可以消除此处非常糟糕的安全漏洞。如果有人通过" dummy','2015-01-01');DROP DATABASE;"会发生什么?进入txtstok.Text?

答案 2 :(得分:0)

您可能在其中一个文本框中有O'shea之类的内容,这意味着因为您使用字符串连接来构建查询字符串而不是参数,所以最终会出现错误的字符串。

如果您切换到使用正确的参数化查询,您将消除发生这种情况的可能性,并将正确格式化的SQL语句发送到服务器:

Dim Query As String
Query = "INSERT INTO Barang(kode_bar,kode_kat,nama_bar,satuan, hbeli, hjual, stok, expired)" & _
        "VALUES(@kode_bar,@kode_kat,@nama_bar,@satuan, @hbeli, @hjual, @stok, @expired)"

Using conn As New SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=Minimarket;Integrated Security=True")
    Using cmd As New SqlCommand(Query, conn)
        cmd.Parameters.Add("@kode_bar", SqlDbType.Int).Value = txtkodebar.Text
        cmd.Parameters.Add("@kode_kat", SqlDbType.VarChar, 50).Value = cmbkodekat.Text
        cmd.Parameters.Add("@nama_bar", SqlDbType.VarChar, 50).Value = txtnamabar.Text
        cmd.Parameters.Add("@satuan", SqlDbType.VarChar, 50).Value = txtsatuan.Text
        cmd.Parameters.Add("@hbeli", SqlDbType.VarChar, 50).Value = txthbeli.Text
        cmd.Parameters.Add("@hjual", SqlDbType.VarChar, 50).Value = txthjual.Text
        cmd.Parameters.Add("@stok", SqlDbType.VarChar, 50).Value = txtstok.Text
        cmd.Parameters.Add("@expired", SqlDbType.DateTime).Value = DateTime.ParseExact(dtpex.Text, "yyyy-MM-dd HH:mm:ss", Nothing)

        conn.Open()
        Dim i As Integer = cmd.ExecuteNonQuery()
        If (i > 0) Then
            MessageBox.Show("Data berhasil disimpan")
        Else
            MessageBox.Show("Data gagal disimpan")
        End If
    End Using
End Using

我不得不猜测你的数据类型,但应该很清楚如何在不同类型之间切换。自从我在VB.NET中编写任何内容以来,这也是大约5年,所以请原谅任何语法错误。