Vb.net 消息框将不显示

Vb.net 消息框将不显示,vb.net,messagebox,Vb.net,Messagebox,如果登录时电子邮件/密码不正确,我希望出现一个消息框。然而,这句话没有任何效果。它是否需要放在其他地方才能工作 MyConn = New OleDbConnection MyConn.ConnectionString = connString MyConn.Open() str1 = ("SELECT * FROM [UserData] WHERE [Username] = '" & TxtUserName.Text & "' AND [Passw

如果登录时电子邮件/密码不正确,我希望出现一个消息框。然而,这句话没有任何效果。它是否需要放在其他地方才能工作

MyConn = New OleDbConnection 
    MyConn.ConnectionString = connString 
    MyConn.Open() 

    str1 = ("SELECT * FROM [UserData] WHERE [Username] = '" & TxtUserName.Text & "' AND [Password] = '" & TxtPassword.Text & "'") 
    Dim cmd1 As OleDbCommand = New OleDbCommand(str1, MyConn)
    dr = cmd1.ExecuteReader 
    While dr.Read() 
        userFound = True 
        TxtPassword.Text = dr("Username").ToString 
        TxtUserName.Text = dr("Password").ToString 
        FirstNameToPass = dr("First Name").ToString 
        LastNameToPass = dr("Last Name").ToString 
        AddressToPass = dr("Address").ToString 
        EmailToPass = dr("Email").ToString 
        If userFound = True Then
            UserAccountView.Show() 
            Me.Hide() 
            TxtPassword.Clear() 
            TxtUserName.Clear() 
        Else
            MsgBox("Login is incorrect")
        End If
    End While
    MyConn.Close() 
End If

如果您的SQL没有返回任何结果(凭据错误时就是这种情况),则永远不会调用MessageBox代码。将此代码块放在While语句之后

If userFound = True Then
    UserAccountView.Show() 
    Me.Hide() 
    TxtPassword.Clear() 
    TxtUserName.Clear() 
Else
    MsgBox("Login is incorrect")
End If  
我只需要使用一个计数来检查用户是否存在并正确

注:

在NoAlias的回答中,它并不能解决userFound始终为真的问题。 所以我实现了这个解决方案,可能会有一些错误,因为我不熟悉OleDb,但没什么大不了的

我还实现了Using,因为在使用:IDisposable时实现它是一个很好的实践


Read博士总是会返回一些东西,即使找不到结果,因为它是一个阅读器。只需使用[UserData]中的SELECT COUNT*执行第一个请求,其中[Username]='&TxtSerName.Text&'和[Password]='&TxtPassword.Text&'如果结果为零,则登录失败incorrect@Plutonix那么我应该在复本上回答吗?旁注:不要在几个小时内反复问同一个问题;始终使用SQL参数,绝不将密码存储为@puropoix所说的纯文本。我甚至说这是我对你另一个问题的回答。请始终使用参数。这仍然不是一个正确的解决方案,因为userFound始终为true
Using MyConn As New OleDbConnection
    MyConn.ConnectionString = connString
    MyConn.Open()
    Dim check As String = "SELECT COUNT(*) FROM [UserData] WHERE [Username] = '" & TxtUserName.Text & "' AND [Password] = '" & TxtPassword.Text & "'"
    Dim UserExist As Boolean = False
    Dim command As OleDbCommand = New OleDbCommand(check, MyConn)
    Using reader As OleDbDataReader = command.ExecuteReader()
        While reader.Read()
            If reader(0) = 0 Then
                UserExist = False
            Else
                UserExist = True
            End If
        End While
    End Using
    If UserExist = True Then
        Dim getData As String = "SELECT * FROM [UserData] WHERE [Username] = '" & TxtUserName.Text & "'"
        Dim command2 As OleDbCommand = New OleDbCommand(getData, MyConn)
        Using reader As OleDbDataReader = command2.ExecuteReader()
            While reader.Read()
                userFound = True
                TxtPassword.Text = dr("Username").ToString
                TxtUserName.Text = dr("Password").ToString
                FirstNameToPass = dr("First Name").ToString
                LastNameToPass = dr("Last Name").ToString
                AddressToPass = dr("Address").ToString
                EmailToPass = dr("Email").ToString
            End While
        End Using
    Else
        MsgBox("Login is incorrect")
    End If
    MyConn.Close()
End Using