检查MySQL UPDATE查询是否成功

时间:2019-04-21 19:27:57

标签: .net vb.net

我有一个登录系统,一旦他们正确回答了安全问题,就可以选择更改用户密码。

一切正常,除了我不确定如何确定是否成功。

If TextBox1.Text = TextBox2.Text Then
            Dim conn As MySqlConnection
            conn = New MySqlConnection("server=localhost; user id=root; password=; database=testing")
            Dim username As Boolean = True
            conn.Open()
            Dim sqlquery As String = "UPDATE user SET password='" & TextBox1.Text & "' WHERE id='" & frmLogin.CurrentUserID & "';"
            Dim data As MySqlDataReader
            Dim adapter As New MySqlDataAdapter
            Dim command As New MySqlCommand
            command.CommandText = sqlquery
            command.Connection = conn
            adapter.SelectCommand = command
            data = command.ExecuteReader
            Dim i As Integer = command.ExecuteNonQuery()
            If (i > 0) Then
                MessageBox.Show("Success!")
            Else
                MessageBox.Show("Failed!")
            End If
            data.Close()
            conn.Close()


        Else
            MsgBox("Passwords must match!")
        End If

它应该显示一个消息框,显示“成功!”。如果成功,并且“失败!”如果不。我收到一个错误->“已经有一个与此Connection关联的打开的DataReader,必须先关闭它。”

1 个答案:

答案 0 :(得分:3)

这不是执行UPDATE查询的正确方法。
您不需要调用任何 ExecuteReader ,也不需要任何 MySqlDataAdapter 。当然,使阅读器保持打开状态会触发您的实际错误,因为该连接在释放服务于阅读器之前无法执行任何其他命令。 但是,您的代码中还存在三个尚不明显的大问题。

您应该始终执行参数化查询,并且永远不要创建从用户输入连接字符串的sql命令。 (搜索Sql Injection)。

您应该始终将MySqlConnection封装在using statement block中以正确处理它。

Using conn as MySqlConnection = New MySqlConnection("server=localhost; user id=root; password=; database=testing")
    Dim username As Boolean = True
    conn.Open()
    Dim sqlquery As String = "UPDATE user SET password=@pass WHERE id=@id"
    Dim command As New MySqlCommand
    command.CommandText = sqlquery
    command.Connection = conn
    command.Parameters.Add("@pass", MySqlDbType.VarChar).Value = TextBox1.Text
    command.Parameters.Add("@id", MySqlDbType.Int32).Value = frmLogin.CurrentUserID
    Dim i As Integer = command.ExecuteNonQuery()
    If (i > 0) Then
        MessageBox.Show("Success!")
    Else
        MessageBox.Show("Failed!")
    End If
End Using

还有另一个问题,但是解决起来比较复杂。将密码以明文形式存储在数据库中被认为具有很高的安全风险。您应该先了解如何Hash and Salt passwords,然后再将其存储在数据库中