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中。我现在要做什么?我放弃了:'(*
答案 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年,所以请原谅任何语法错误。