0

だから、私が取り組んでいる vb.net プロジェクトでユーザーのパスワードを変更しようとしています。しかし、コードを実行するたびに、「問題が発生しました」というメッセージが表示されます。理由がわかりません。MYSQL データベースを使用しています。誰でも私を助けることができますか?

        Try
        reader = cmd.ExecuteReader()
        Dim found As Boolean = False
        Do While reader.Read()

            If username = DirectCast(reader("username"), String) Then
                If password = DirectCast(reader("password"), String) Then
                    found = True
                Else
                    MessageBox.Show("username and password do not match")
                End If
            End If



            If found = True Then
                Dim cmd2 As New MySqlCommand
                Dim insertStatment As String = "UPDATE login set password = '" + 
               newpassword + "' where username = '" + username + "'" , con)


                cmd2.ExecuteNonQuery()
                MessageBox.Show("password change successfully")

                'End If
            End If
        Loop

    Catch
        MessageBox.Show("Something went wrong")
4

1 に答える 1

0

文字列連結を使用して SQL ステートメントを作成することは避けてください。このようにすると、ユーザー名/パスワードに一重引用符が含まれている場合や、最悪の場合、入力テキストボックスにこのようなことを書く賢い悪意のあるユーザーがいる場合など、エラーへの道が導かれます。

だからあなたは書くべきです

Dim insertStatment As String = "UPDATE login set password = @p1 where username = @p2"
Dim cmd2 As New MySqlCommand(insertStatment, con)
cmd2.Parameters.AddWithValue("@p1", password)
cmd2.Parameters.AddWithValue("@p2", username)
cmd2.ExecuteNonQuery()

エラーの別の考えられる原因は、MySqlConnection の処理です。あなたのコードには接続の Open がないので、開いていると思いますが、これはあなたのコードの別の問題につながります:

例外をキャッチせず、使用できないエラー メッセージを出力します。
本当にメッセージを表示したい場合は、例外で指定されたエラー メッセージを出力してみてください

Catch e As Exception
    MessageBox.Show("Something went wrong: " & Environment.NewLine & e.Message)

これにより、問題が何であるかを説明する非常に明確なメッセージが表示されます。

于 2013-04-27T17:28:34.963 に答える