'Login form in VB.Net using Access database not working

I'm pretty sure this code used to allow me to login using the SQL statement below, but now it doesn't and just clears the text boxes. There is also an error message that I would like displayed when the username and password do not match that in the database. This is, like the other one, a label that the visibility would need changing. I had this code:

        Try
            UserType = GetUserType(txtUsername.Text.Trim, txtPass.Text.Trim)
        Catch ex As Exception
            lblErrorMatch.Visible = True
        End Try

However, this just clears the text boxes when the details do not match.

Imports System.Data.OleDb
Public Class frmLogin
    Private DBCmd As New OleDbCommand
    Private ConStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;" &
                               "Data Source=|DataDirectory|\NewHotel.mdb;"

    Private Sub btnLogIn_Click(sender As Object, e As EventArgs) Handles btnLogIn.Click
        Dim UserType As Object

        'Distinguishing beetween different users
        If UserType Is Nothing Then
            lblErrorEmpty.Visible = True
        ElseIf UserType.ToString = "MANAGER" Then
            frmHomeManager.Show()
        ElseIf UserType.ToString = "RECEPTIONIST" Then
            frmHomeReceptionist.Show()
        End If

        'Username and password not matching error message


        'Empty textboxes error message
        If txtUsername.Text = "" OrElse txtPass.Text = "" Then lblErrorEmpty.Visible = True : Exit Sub

        txtUsername.Clear()
        txtPass.Clear()
        chkShowPass.Checked = False
    End Sub

    Private Function GetUserType(Username As String, Pass As String) As Object
        Dim UserType As Object

        'Pull username and password from the database to check against the entered login details
        Using DBCon As New OleDb.OleDbConnection(ConStr),
            DBCmd As New OleDbCommand("SELECT UserType FROM tblEmployeeLogin WHERE [Username] = @Username AND [Pass] = @Pass", DBCon)
            DBCmd.Parameters.Add("@Username", OleDbType.VarChar).Value = Username
            DBCmd.Parameters.Add("@Pass", OleDbType.VarChar).Value = Pass
            DBCon.Open()
            UserType = DBCmd.ExecuteScalar.ToString
        End Using
        Return UserType
    End Function

    Private Sub chkShowPass_CheckedChanged(sender As Object, e As EventArgs) Handles chkShowPass.CheckedChanged
        'Show password when checkbox is checked
        If chkShowPass.Checked = True Then
            txtPass.PasswordChar = Nothing
        ElseIf chkShowPass.Checked = False Then
            txtPass.PasswordChar = "*"
        End If
    End Sub

    Private Sub txtUsername_TextChanged(sender As Object, e As EventArgs) Handles txtUsername.TextChanged, txtPass.TextChanged
        'Make error message disappear after text is enetered into either of the text boxes
        lblErrorEmpty.Visible = False
        lblErrorMatch.Visible = False
    End Sub

    Private Sub lnkClear_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles lnkClear.LinkClicked
        txtUsername.Clear()
        txtPass.Clear()
        chkShowPass.Checked = False
    End Sub

    Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
        'Close the form down which stops the application
        Me.Close()
    End Sub
End Class

Thank you for your time :)



Solution 1:[1]

I recently made a login like what you're trying to do. Hopefully you understand this code and it helps:

Dim CMD As OleDbCommand = New OleDbCommand("SELECT * FROM Staff WHERE Login = '" & ID & "'", Con)
Dim user As String

Try
    Con.Open()
    Dim sdr As OleDbDataReader = CMD.ExecuteReader()

    If (sdr.Read() = True) Then
        user = sdr("Login")
        MessageBox.Show("Login Successful!")
        ActiveUser.IsLoggedIn = True
    Else
        MessageBox.Show("Invalid username or password!")

    End If
Catch ex As Exception
    MsgBox(ex.Message)
Finally
    Con.Close()
End Try

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1