does anybody know how to create a login form in vb.net? I have an access database and I am trying to create a login form with a user name and password to have multiple users login.

Please help.

arjunsasidharan commented: Welcome to daniweb +3

Dani AI

Generated

A few pitfalls in this thread are causing the login issues. First, use parameterized queries and open the connection before executing anything. In OleDb, parameters are positional, so use ? placeholders and add parameters in the same order. Also, store usernames/passwords as text fields; do not use Yes/No types. The sample in that queries Username=yes is treating a text column as Boolean, which will fail. For .accdb files use the ACE provider; for older .mdb use Jet. is right about using the exact file path, but prefer a relative path or |DataDirectory| for deploys.

Here is a minimal, safe pattern for Access + VB.NET that validates a hashed password. It avoids SQL injection and the ExecuteReader timing issue that and hit.

Imports System.Data.OleDb
Imports System.Security.Cryptography

Private Function TryLogin(user As String, pass As String) As Boolean
    Using cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Data\app.accdb")
        Using cmd As New OleDbCommand("SELECT PasswordHash, PasswordSalt FROM Users WHERE UserName = ?", cn)
            cmd.Parameters.Add("?", OleDbType.VarWChar).Value = user
            cn.Open()
            Using r = cmd.ExecuteReader()
                If Not r.Read() Then Return False
                Dim salt = Convert.FromBase64String(CStr(r("PasswordSalt")))
                Dim expected = CStr(r("PasswordHash"))
                Using k = New Rfc2898DeriveBytes(pass, salt, 10000)
                    Dim actual = Convert.ToBase64String(k.GetBytes(32))
                    Return actual = expected
                End Using
            End Using
        End Using
    End Using
End Function

Quick fixes and tips:

  • Open the connection before ExecuteReader; dispose connections with Using.
  • If you only need to know whether a row exists, use SELECT COUNT(*) ... with ExecuteScalar (unlike ’s SELECT * with ExecuteScalar).
  • Quote string criteria in SQL; mismatched quotes cause the classic "Data type mismatch" error.
  • Never store plaintext passwords. Save a base64 hash and salt as text fields, and compare as shown.
  • For ASP.NET, prefer the built-in membership/Identity approach over rolling your own.

Recommended Answers

All 13 Replies

Dim com As New MySqlCommand
Dim dr As MySqlDataReader
Dim uSQL As String

Dim ctr As Integer = 0

Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click

Call OpenDB()

uSQL = "SELECT username, password, user_account from quser where username = '" & txtUsername.Text & "' and password = '" & txtPassword.Text & "'"

Try
conn.Open()

com = New MySqlCommand(uSQL, conn)
dr = com.ExecuteReader

ctr += 1

If Not dr.HasRows And ctr = 1 Then
lblTrial.Text = "You have 2 trials remaining!"
MsgBox("Wrong Username or password.", MsgBoxStyle.Information)
txtUsername.Text = ""
txtPassword.Text = ""
txtUsername.Focus()

ElseIf Not dr.HasRows And ctr = 2 Then
lblTrial.Text = "You have 1 trial remaining!"
MsgBox("Wrong Username or password.", MsgBoxStyle.Information)
txtUsername.Text = ""
txtPassword.Text = ""
txtUsername.Focus()

ElseIf Not dr.HasRows And ctr = 3 Then
lblTrial.Text = "You have no trial remaining!"
MsgBox("Wrong Username or password." & vbCrLf & "Please restart the program!", MsgBoxStyle.Information)

Else
While dr.Read
MainForm.Show()
txtUser.Text = dr("user_account").ToString()
Me.Hide()
'MsgBox("Hello World")
End While
End If

If ctr = 3 Then
Me.Close()
End If


Catch ex As Exception
conn.Close()
End Try

End Sub

1.)Create a database in Ms. Access e.g. create table, fields - username and password and save the table as LOGIN or what you want.
2.)Click on your table you created (LOGIN or what you wrote) and fill in the data username - yes and password - no.
3.)Go to VB.NET program and open a form and connect the database you created.
4.)To connect a database, check on the top of the menu bar in VB.NET and look for data, then click on add new data source.
5.)Data Source Configuration Wizard appear, click on next. Then you can see a new connection tab, click onto it.
6.)Add connection appears,on Data source the default you can see is Microsoft SQL Server Database File (SqlClient) but since we are using Ms Access we will change it, by clicking the change tab next to it.
7.)Then browse for your database file name by clicking on browse and locate it where it is on your computer (place where you saved your database).
8.)Click on ok,next.
9.)Check the tables and views and click finish.
10.)Go to an empty form and drag the Username and password from the data source. If you cannot see the data source,go to data and then show data sources.
11.) Double click on your form in an empty space and copy this(under Public Class Form1 and above Private sub form1.....):

Dim DbCon As New OleDb.OleDbConnectio
Dim dbUp As New OleDb.OleDbCommand
Dim Read As OleDb.OleDbDataReader

11.)Go back to the design form.
12.)Add 2 buttons on the same form, rename both the buttons,one saying ok and the other as cancel.
13.)Double click on the ok button and enter the codes as follows:


Private Sub Ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
DbCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\User\Desktop\Database.mdb"
DbCon.Open()
dbUp.Connection = DbCon
dbUp.CommandType = CommandType.Text
dbUp.CommandText = "Select * from LOGIN where Username=yes and Password=no "
dbUp.Parameters.Add("Username", Data.OleDb.OleDbType.Variant)
dbUp.Parameters.Add("Password", Data.OleDb.OleDbType.Variant)
dbUp.Parameters("Username").Value = UsernameTextBox.Text
dbUp.Parameters("Password").Value = PasswordTextBox.Text
Read = dbUp.ExecuteReader
With Read
If .Read Then
Me.Hide()
Form2.Show()
Else
UsernameTextBox.Clear()
PasswordTextBox.Clear()
MessageBox.Show("Invalid Username or Password")
UsernameTextBox.Focus()
End If
End With

14.)Then go to the design page again and double click on cancel button and copy the following:

If MessageBox.Show("Do you want to exit?", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
End
Else
End If
End Sub

15.) Once you have done that run your program and check whether the codes worked.

commented: Im having problem with the DbCon.Open() +0

do you know already how to do a log in form in vb.net?

yes, ofcourse, you need to use the toolbox, it comes with the buttons and all the little things you use to create your GUI. its very easy. then simply code your program.

else the internet is a pretty good resource :P

1.)Create a database in Ms. Access e.g. create table, fields - username and password and save the table as LOGIN or what you want.
2.)Click on your table you created (LOGIN or what you wrote) and fill in the data username - yes and password - no.
3.)Go to VB.NET program and open a form and connect the database you created.
4.)To connect a database, check on the top of the menu bar in VB.NET and look for data, then click on add new data source.
5.)Data Source Configuration Wizard appear, click on next. Then you can see a new connection tab, click onto it.
6.)Add connection appears,on Data source the default you can see is Microsoft SQL Server Database File (SqlClient) but since we are using Ms Access we will change it, by clicking the change tab next to it.
7.)Then browse for your database file name by clicking on browse and locate it where it is on your computer (place where you saved your database).
8.)Click on ok,next.
9.)Check the tables and views and click finish.
10.)Go to an empty form and drag the Username and password from the data source. If you cannot see the data source,go to data and then show data sources.
11.) Double click on your form in an empty space and copy this(under Public Class Form1 and above Private sub form1.....):

Dim DbCon As New OleDb.OleDbConnectio
Dim dbUp As New OleDb.OleDbCommand
Dim Read As OleDb.OleDbDataReader

11.)Go back to the design form.
12.)Add 2 buttons on the same form, rename both the buttons,one saying ok and the other as cancel.
13.)Double click on the ok button and enter the codes as follows:


Private Sub Ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
DbCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\User\Desktop\Database.mdb"
DbCon.Open()
dbUp.Connection = DbCon
dbUp.CommandType = CommandType.Text
dbUp.CommandText = "Select * from LOGIN where Username=yes and Password=no "
dbUp.Parameters.Add("Username", Data.OleDb.OleDbType.Variant)
dbUp.Parameters.Add("Password", Data.OleDb.OleDbType.Variant)
dbUp.Parameters("Username").Value = UsernameTextBox.Text
dbUp.Parameters("Password").Value = PasswordTextBox.Text
Read = dbUp.ExecuteReader
With Read
If .Read Then
Me.Hide()
Form2.Show()
Else
UsernameTextBox.Clear()
PasswordTextBox.Clear()
MessageBox.Show("Invalid Username or Password")
UsernameTextBox.Focus()
End If
End With

14.)Then go to the design page again and double click on cancel button and copy the following:

If MessageBox.Show("Do you want to exit?", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
End
Else
End If
End Sub

15.) Once you have done that run your program and check whether the codes worked.

i haveing the problem with Read = dbUp.ExecuteReader

I personal want a code to upload an image with a textbox

hi Alabai

i am haveing the same problem with Read = dbUp.ExecuteReader.
did u sort out this issue, if yes please tell me how

Does anyone know how to do a login form in vb.net 2008 with an sql database?

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
        Dim count As Integer
 
        Try
 
            If conn.State = ConnectionState.Closed Then
                conn.Open()
            Else
                conn.Open()
                userstring = "Select * from Hotel.dbo.Users where UserName = '" & UsernameTextBox.Text & "' and Password = '" & PasswordTextBox.Text & "'"
                usercmd = New SqlCommand(userstring, conn)
                count = usercmd.ExecuteScalar
 
                If count > 0 Then
                    MsgBox("records exist")
                    form2.show()
                    'load main form of application
 
                Else
                    MsgBox("no records found")
                   're-enter login username and password
 
                End If
 
                conn.Close()
 
            End If
 
        Catch ex As Exception
            Throw ex
            conn.Close()
 
        End Try
 
    End Sub

well why wont ya try this stuff

Imports System.Data.OleDb

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
Dim sql = "SELECT User_Name,password FROM PasswordTable WHERE User_Name = '" & usertxt.Text & "' AND password = '" & passtxt.Text & "'"

cmd = New OleDbCommand(sql, conn)
Dim dr As OleDbDataReader = cmd.ExecuteReader
Try
conn.Open()

Catch ex As InvalidOperationException
MsgBox(ex.Message)

End Try
Try
Catch ex As System.InvalidOperationException
If dr.Read = False Then
MessageBox.Show("Authentication Failed...")
Else
MessageBox.Show("Login Successful...")
Me.Hide()
Form1.Show()
End If
End Try
conn.Close()
End Sub

I'm having problem with the DbCon.Open()

  1. type the EXACT path of the file inside your connection string (I would suggest you to put the database some where on your hard disk, like C:\MyFolder, not onto the desktop).

  2. Open a connection if you wanna use DataReader class.

  3. And if your using an Access 07,

Try this:

DbCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.12.0;Data Source=C:\Users\Sample\Database.accdb"

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.