Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何解决UPDATE语句中的语法错误_Vb.net - Fatal编程技术网

Vb.net 如何解决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 " & _

这个代码有什么问题?我什么都做了,但我还是得到了一份工作 UPDATE语句中的语法错误

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
而不是
字符串
。我建议您更改为.net
MessageBo
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
而不是
字符串
。我建议您更改为.net
MessageBo
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
)的名称。错误是什么?