Vb.net 如何解决UPDATE语句中的语法错误
这个代码有什么问题?我什么都做了,但我还是得到了一份工作 UPDATE语句中的语法错误Vb.net 如何解决UPDATE语句中的语法错误,vb.net,Vb.net,这个代码有什么问题?我什么都做了,但我还是得到了一份工作 UPDATE语句中的语法错误 Dim konfirmasi As String = MsgBox("Yakin data ingin diubah ?", vbQuestion + vbYesNo, "Konfirmasi") If konfirmasi = vbYes Then SqlQuery = "Update Tabel_Pengguna set " & _
Dim konfirmasi As String = MsgBox("Yakin data ingin diubah ?", vbQuestion + vbYesNo, "Konfirmasi")
If konfirmasi = vbYes Then
SqlQuery = "Update Tabel_Pengguna set " & _
"Username = '" & txtUsername.Text & "'," & _
"Password ='" & txtPassword.Text & "' where Kode_Pengguna = '" & txtKodePengguna.Text & "'"
CMD = New OleDbCommand(SqlQuery, DB)
CMD.ExecuteNonQuery()
MsgBox("Data berhasil diubah", vbInformation, "Informasi")
要使
MsgBox
工作,您需要使用按位或
运算符。此函数返回一个MsgBoxResult
而不是字符串
。我建议您更改为.netMessageBo
x,并保留旧的VB6代码
Private Sub OPCode()
'Dim konfirmasi As MsgBoxResult = MsgBox("Yakin data ingin diubah ?", vbQuestion Or vbYesNo, "Konfirmasi")
Dim konfirmasi As DialogResult = MessageBox.Show("Yakin data ingin diubah ?", "Konfirmasi", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If konfirmasi = DialogResult.Yes Then
UpdatePengguna(txtUsername.Text, txtPassword.Text, txtKodePengguna.Text)
End If
End Sub
将连接保持在使用它们的方法的本地,这样就可以使用Using…End Using
块关闭和处理它们。在该代码中,连接和命令都包含在Using
块中;使用注意第一行末尾的逗号
Private Sub UpdatePengguna(UserName As String, Password As String, PenKode As String)
Using cn As New OleDbConnection(ConStr),
cmd As New OleDbCommand("Update Tabel_Pengguna Set [UserName] = @Username, [Password] = @Password Where Kode_Pengguna = @Kode;", cn)
cmd.Parameters.Add("@Username", OleDbType.VarChar, 100).Value = UserName
cmd.Parameters.Add("@Password", OleDbType.VarChar, 100).Value = Password
cmd.Parameters.Add("@Kode", OleDbType.VarChar, 100).Value = PenKode
cn.Open()
cmd.ExecuteNonQuery()
End Using
MessageBox.Show("Data berhasil diubah", "Informasi", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
始终使用参数以避免Sql注入。在OleDb中,参数的名称被忽略,但我们使用描述性名称使读取代码更容易。重要的是秩序。参数在Sql语句中的显示顺序必须与参数添加到参数集合的顺序相匹配。您必须检查数据库中的数据类型和字段大小是否正确。我怀疑Kode_Pengguna可能是一种数字类型。如果是,请确保更改传入参数的数据类型PenKode
我相信你忽略了打开你的连接,除非你正在传递打开的连接(请保持我的心!)<代码>在最后一分钟打开连接,就在之前。执行…
并尽快关闭连接,使用结束连接
Private Sub UpdatePengguna(UserName As String, Password As String, PenKode As String)
Using cn As New OleDbConnection(ConStr),
cmd As New OleDbCommand("Update Tabel_Pengguna Set [UserName] = @Username, [Password] = @Password Where Kode_Pengguna = @Kode;", cn)
cmd.Parameters.Add("@Username", OleDbType.VarChar, 100).Value = UserName
cmd.Parameters.Add("@Password", OleDbType.VarChar, 100).Value = Password
cmd.Parameters.Add("@Kode", OleDbType.VarChar, 100).Value = PenKode
cn.Open()
cmd.ExecuteNonQuery()
End Using
MessageBox.Show("Data berhasil diubah", "Informasi", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
我真的希望您没有将密码保存为纯文本。要使MsgBox
工作,您需要使用按位或
运算符。此函数返回一个MsgBoxResult
而不是字符串
。我建议您更改为.netMessageBo
x,并保留旧的VB6代码
Private Sub OPCode()
'Dim konfirmasi As MsgBoxResult = MsgBox("Yakin data ingin diubah ?", vbQuestion Or vbYesNo, "Konfirmasi")
Dim konfirmasi As DialogResult = MessageBox.Show("Yakin data ingin diubah ?", "Konfirmasi", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If konfirmasi = DialogResult.Yes Then
UpdatePengguna(txtUsername.Text, txtPassword.Text, txtKodePengguna.Text)
End If
End Sub
将连接保持在使用它们的方法的本地,这样就可以使用Using…End Using
块关闭和处理它们。在该代码中,连接和命令都包含在Using
块中;使用
注意第一行末尾的逗号
Private Sub UpdatePengguna(UserName As String, Password As String, PenKode As String)
Using cn As New OleDbConnection(ConStr),
cmd As New OleDbCommand("Update Tabel_Pengguna Set [UserName] = @Username, [Password] = @Password Where Kode_Pengguna = @Kode;", cn)
cmd.Parameters.Add("@Username", OleDbType.VarChar, 100).Value = UserName
cmd.Parameters.Add("@Password", OleDbType.VarChar, 100).Value = Password
cmd.Parameters.Add("@Kode", OleDbType.VarChar, 100).Value = PenKode
cn.Open()
cmd.ExecuteNonQuery()
End Using
MessageBox.Show("Data berhasil diubah", "Informasi", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
始终使用参数以避免Sql注入。在OleDb中,参数的名称被忽略,但我们使用描述性名称使读取代码更容易。重要的是秩序。参数在Sql语句中的显示顺序必须与参数添加到参数集合的顺序相匹配。您必须检查数据库中的数据类型和字段大小是否正确。我怀疑Kode_Pengguna可能是一种数字类型。如果是,请确保更改传入参数的数据类型PenKode
我相信你忽略了打开你的连接,除非你正在传递打开的连接(请保持我的心!)<代码>在最后一分钟打开连接,就在之前。执行…
并尽快关闭连接,使用结束连接
Private Sub UpdatePengguna(UserName As String, Password As String, PenKode As String)
Using cn As New OleDbConnection(ConStr),
cmd As New OleDbCommand("Update Tabel_Pengguna Set [UserName] = @Username, [Password] = @Password Where Kode_Pengguna = @Kode;", cn)
cmd.Parameters.Add("@Username", OleDbType.VarChar, 100).Value = UserName
cmd.Parameters.Add("@Password", OleDbType.VarChar, 100).Value = Password
cmd.Parameters.Add("@Kode", OleDbType.VarChar, 100).Value = PenKode
cn.Open()
cmd.ExecuteNonQuery()
End Using
MessageBox.Show("Data berhasil diubah", "Informasi", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
我真的希望您没有将密码保存为纯文本。您没有提到您正在使用的数据库。我将猜测Access,单词Password
是一个关键字,它需要用方括号括起来[]
。此外,txtexername
和txtPassword
中的值完全可能导致解析问题。利用参数来防止这一点是:@JayV的评论进一步——这看起来像是一个SQL注入漏洞。至少,撇号会破坏此语句(请尝试添加一个名为O'Reilly
)的名称。错误是什么?您没有提到正在使用的数据库。我将猜测Access,单词Password
是一个关键字,它需要用方括号括起来[]
。此外,txtexername
和txtPassword
中的值完全可能导致解析问题。利用参数来防止这一点是:@JayV的评论进一步——这看起来像是一个SQL注入漏洞。至少,撇号会破坏此语句(尝试添加一个名为O'Reilly
)的名称。错误是什么?