通过连接到vb.net中的mysql来更改密码

时间:2015-09-17 17:32:14

标签: 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 = 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

2 个答案:

答案 0 :(得分:1)

密码是reserved word for MySql。如果你有这个名字的字段,你应该记得总是在那个单词周围添加反引号。

表示您的代码需要重写以避免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
  1. 资源泄漏 - 使用语句确保在异常情况下也正确处理每个一次性对象
  2. Sql Injection - 使用字符串连接可以让攻击者轻易地对您的数据库造成严重破坏(Here the example)
  3. 解析问题。 - 同样,如果您的一个字符串值包含单引号,字符串连接将失败。
  4. 性能 - 由于许多原因,创建DataReader很麻烦。如果您只需要从一行读取一列,则ExecuteScalar会更快,并且在您关闭阅读器之前不会阻止连接。 (您的代码无法正常工作,因为阅读器会保持连接繁忙,在关闭阅读器之前无法使用命令连接
  5. 保持存在的另一点是明文密码问题。如果您将用户的密码以明文形式存储在数据库中,则可以使用任何管理工具(MySqlWorkbench,phpMyAdmin ....)访问数据库的每个人都可以轻松地了解所有用户的密码。这是一个更复杂的问题,如果你搜索这个网站,你可以找到很多关于那个的问题/答案

答案 1 :(得分:0)

我没有看到cmd.ExecuteReader命令的UPDATE。你错过了那个,或者它刚从帖子中丢失了。您应该执行查询

    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