在vb.net中通过连接mysql更改密码
当我单击按钮时,它不会更新数据库中的数据。我有3个文本框,一个是输入用户名,第二个是输入旧密码,第三个是输入新密码在vb.net中通过连接mysql更改密码,mysql,vb.net,Mysql,Vb.net,当我单击按钮时,它不会更新数据库中的数据。我有3个文本框,一个是输入用户名,第二个是输入旧密码,第三个是输入新密码 Dim con As New MySqlConnection("host=localhost; username=root; password=; database=pawnshop") Dim cmd As New MySqlCommand Dim dr As MySqlDataReader con.Open() cmd.Connection
Dim con As New MySqlConnection("host=localhost; username=root; password=; database=pawnshop")
Dim cmd As New MySqlCommand
Dim dr As MySqlDataReader
con.Open()
cmd.Connection = con
cmd.CommandText = " select password from login where password ='" & txtChange.Text & "'"
dr = cmd.ExecuteReader
If dr.HasRows Then
cmd.Connection = con
cmd.CommandText = " UPDATE login SET password ='" & txtConfirm.Text & "' where userid = '" & txtUser.Text & "'"
Else
MsgBox("Password is not correct")
End If
我没有看到您的
UPDATE
命令的cmd.ExecuteReader
。你错过了吗,或者只是在帖子上错过了。您应该执行以下查询:
If dr.HasRows Then
cmd.Connection = con
cmd.CommandText = " UPDATE login SET password ='" & txtConfirm.Text & "' where userid = '" & txtUser.Text & "'"
dr = cmd.ExecuteReader // missing statement
Else
MsgBox("Password is not correct")
End If
密码是一个密码。如果您有使用此名称的字段,您应该记住始终在该单词周围加上反勾号
您的代码需要重写,以避免Sql注入、解析问题、资源泄漏以及性能方面的一些改进
Using con = New MySqlConnection(......)
Using cmd = New MySqlCommand()
con.Open()
cmd.Connection = con
cmd.CommandText = "select `password` from login where `password` =@oldp"
cmd.Parameters.Add("@oldp", MySqlDbType.String).Value = txtChange.Text
Dim result = cmd.ExecuteScalar()
if result IsNot Nothing then
cmd.Parameters.Clear()
cmd.CommandText = "UPDATE login SET `password` = @newp where userid = @uid"
cmd.Parameters.Add("@newp", MySqlDbType.String).Value = txtConfirm.Text
cmd.Parameters.Add("@uid", MySqlDbType.Int32).Value = txtUser.Text
cmd.ExecuteNonQuery()
Else
MsgBox("Password is not correct")
End If
End Using
End Using
另一个需要注意的问题是明文密码问题。如果将用户的密码以明文形式存储在数据库中,则可以使用任何管理工具访问数据库的所有人(MySqlWorkbench、phpMyAdmin…)您可以轻松了解所有用户的密码。这是一个更复杂的问题,如果您搜索此网站,您会发现许多有关此问题的问题/答案您是否收到任何错误消息?请尽快开始使用参数化查询您不执行更新查询…使用用户名“O'Bannon”、“D'Angelo”、“O'Grady”测试您的系统或者“O'Keefe”我没有收到任何错误消息+“不要将密码存储为明文”是的,忘了这一点。