【问题标题】:Showing a message box when username and password is incorrect用户名和密码不正确时显示消息框
【发布时间】:2012-12-02 01:30:20
【问题描述】:

我的程序有一个登录表单,它工作正常,但是当我输入一个不在我的数据库中的用户名和密码时,用户名和密码的文本框只会清除文本并且不显示显示“用户名/密码错误”

这是我的代码:

 Dim con As OleDbConnection = New OleDbConnection( _
               "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= UserPass.mdb;")
    con.Open()
    Dim str As String
    str = "SELECT * FROM UserPass WHERE Username='" & txtUsername.Text & "' AND Password='" & txtPassword.Text & "'"
    Dim cmd As OleDbCommand = New OleDbCommand(str, con)
    cmd.Parameters.AddWithValue("user", txtUsername.Text)
    cmd.Parameters.AddWithValue("pass", txtPassword.Text)
    Dim sdr As OleDbDataReader = cmd.ExecuteReader()
    ' It will be case sensitive if you compare usernames here.   
    If sdr.HasRows Then
        If sdr.Read Then
            If txtPassword.Text <> sdr("Password").ToString Or txtUsername.Text <> sdr("Username").ToString Then
                MessageBox.Show(" Incorrect Username/Password. Login Denied ", " Error! ", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Else
                MessageBox.Show(" You are now Logged In! ", " Welcome! ", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                frmOne.Show()
                Me.Hide()
            End If
        End If
    End If

当我输入不在我的数据库中的用户名和密码时,如何让我的程序显示一个消息框?

【问题讨论】:

    标签: vb.net winforms passwords


    【解决方案1】:

    Line sdr.HasRows 看起来不会触发。如果用户名和密码不匹配,则在您的选择语句中不会有行。

    考虑把代码改成这样:

    If sdr.HasRows Then
        If sdr.Read Then
                MessageBox.Show(" You are now Logged In! ", " Welcome! ", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                frmOne.Show()
                Me.Hide()
        End If
    Else
        MessageBox.Show(" Incorrect Username/Password. Login Denied ", " Error! ", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End If
    

    【讨论】:

    • 您的代码可以工作,但它不再使文本框区分大小写
    • @RaraArar 将您的案例检查逻辑添加回If sdr.Read
    • 在我将案例检查逻辑添加回语句后,“sdr.HasRows”会自动添加
    【解决方案2】:

    看看这是否适合你,它使用的是 DMudge 向你展示的方法,但添加了案例检查。如果可行,请接受他的回答。

    If sdr.HasRows Then
        If sdr.Read Then
            If txtPassword.Text <> sdr("Password").ToString Or txtUsername.Text <> sdr("Username").ToString Then
                MessageBox.Show(" Incorrect Username/Password. Login Denied ", " Error! ", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Else
                MessageBox.Show(" You are now Logged In! ", " Welcome! ", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                frmOne.Show()
                Me.Hide()
            End If
        End If
    Else
        MessageBox.Show(" Incorrect Username/Password. Login Denied ", " Error! ", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End If
    

    【讨论】:

    • @RaraArar 你真的应该将 DMudge 的答案标记为正确的答案,我只是用这个答案试图向你解释我在评论中所说的话,这样阅读代码更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 2012-06-14
    • 2017-09-20
    • 2021-02-08
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多