更新语句条件失败

时间:2015-10-01 10:27:39

标签: sql-server vb.net sql-update conditional-statements

我有这个代码可以完美运行但只有我遇到的问题是,当我输入数据库中不存在的用户名或密码时,此代码仍会显示消息“密码已成功更改”,而不会对db或错误信息。 我想知道一种方法来处理这个问题。有没有办法在WHERE条件失败时显示消息?

Try
        If txtBoxSettingNewPassword.Text = txtBoxSettingConfPassword.Text Then
            con.Open()
            cmd.Connection = con
            cmd.CommandType = System.Data.CommandType.Text
            cmd.CommandText = ("UPDATE [User] " & _
            "SET password = '" & (txtBoxSettingNewPassword.Text) & "'" & _
            "WHERE user_name ='" & (txtBoxSettingUserName.Text) & "'" & " and password = '" & (txtBoxSettingOldPassword.Text) & "';")
            cmd.ExecuteNonQuery()
            MessageBox.Show("password changed successfully")
        Else
            MessageBox.Show("Passwords do not match")
        End If
    Catch ex As Exception
        MessageBox.Show("Something went wrong," & ex.Message)
    Finally
        con.Close()
    End Try 

提前致谢

3 个答案:

答案 0 :(得分:2)

你需要移动你的

MessageBox.Show("password changed successfully")
每当你进行更新时,在if块之外的

,无论是否成功,都会显示该消息,因为没有代码可以检查它是否成功。

您可以尝试这样:

cmd = New OleDbCommand("update .....", cn)
rowCount = cmd.ExecuteNonQuery()
If rowCount < 1 Then
MessageBox.Show("password changed successfully")

旁注:

您的代码对SQL Injection是开放的。您需要使用参数化查询来避免这种情况。

答案 1 :(得分:0)

如果找不到匹配项,则SQL update命令不会出错。

您对ExecuteNonQuery的调用具有可以分配给整数的返回值。 e.g。

numRows = cmd.ExecuteNonQuery()

如果此值为零,则表示找不到匹配项,因此您应报告错误。

答案 2 :(得分:0)

我会在这里做一些防御性编码,并在运行更新之前检查用户是否存在,而不是依赖于catch。它没那么高效,因为有两次数据库往返。

将try / catch留给意外错误......不是您可能知道的错误。