首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查MySQL更新查询是否成功

问检查MySQL更新查询是否成功
EN

Stack Overflow用户
提问于 2019-04-21 19:27:57
回答 1查看 1.1K关注 0票数 1

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

一切都很好,除了我不知道如何确定它是否成功。

代码语言:javascript
复制
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

它应该显示一个消息框,上面写着“成功!”如果成功了,“失败了!”如果不是。我收到一个错误->‘已经有一个与此连接相关的打开DataReader,必须先关闭它。’

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-21 19:40:08

这不是执行更新查询的正确方式。

您不需要调用任何ExecuteReader,也不需要任何MySqlDataAdapter。当然,让读取器打开会触发您的实际错误,因为连接在没有为读取器服务之前不能执行任何其他命令。但是,您的代码中也有三个不明显的大问题。

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

您应该始终将您的MySqlConnection包含在一个使用语句块中,以便正确地处理它。

代码语言:javascript
复制
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

还有另一个问题,但这个问题要解决得更复杂。在数据库中以明文存储密码被认为是非常高的安全风险。在将它们存储到数据库之前,您应该学习如何使用哈希和盐密码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55786003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档