在 vb.net 中使用 ms access 登录表单

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2326131/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-09 14:43:09  来源:igfitidea点击:

login form using ms access in vb.net

vb.netms-access

提问by user225269

I'm creating a login form for vb.net using ms access 2003 as database. But it only checks for the username and bypasses the password. Meaning that if the username is correct and the password doesn't jive with the username, the user can still enter the system. Here is my code:

我正在使用 ms access 2003 作为数据库为 vb.net 创建登录表单。但它只检查用户名并绕过密码。这意味着如果用户名正确且密码与用户名不一致,用户仍然可以进入系统。这是我的代码:

Try

            Dim NoAcc As String
            Dim NoAccmod2 As String
            Dim NoPas As String

            Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;Jet OLEDB:Database Password=nrew123$%^;")
            Dim cmd As OleDbCommand = New OleDbCommand("Select * from admintable where AdminName= '" & TextBox4.Text & "' ", cn)


            cn.Open()

            rdr = cmd.ExecuteReader
            If rdr.HasRows Then
                rdr.Read()
                NoAcc = rdr("AdminName")
                NoPas = rdr("AdminPass")
                If (TextBox4.Text = NoAcc And TextBox3.Text = NoPas) Then NoAccmod2 = NoAcc

                adminview.Show()



                Me.Hide()
            Else
                MsgBox("Incorrect Username/Password")
                TextBox4.Clear()
                TextBox3.Clear()

            End If
        Catch
            MsgBox("Error logging in, please try again", MsgBoxStyle.Exclamation)
        End Try

How do I do it so that it checks both username and password?

我该怎么做才能检查用户名和密码?

采纳答案by Klaus

You are using a single line IF .. THEN :
If (TextBox4.Text = NoAcc And TextBox3.Text = NoPas) Then NoAccmod2 = NoAccso the next line will always be executed:
adminview.Show()

您使用的是单行 IF .. THEN :
If (TextBox4.Text = NoAcc And TextBox3.Text = NoPas) Then NoAccmod2 = NoAcc所以下一行将始终被执行:
adminview.Show()

you have to rearrange your IF .. THEN conditions

你必须重新排列你的 IF .. THEN 条件

回答by Jo a know

I will share about login system in vb.net using binding navigator that less of coding. just following the link below! http://www.tesear.com/2011/09/login-system-in-vbnet.html

我将使用较少编码的绑定导航器在 vb.net 中分享登录系统。只需按照下面的链接! http://www.tesear.com/2011/09/login-system-in-vbnet.html

回答by phani

Try

尝试

        Dim NoAcc As String

        Dim NoPas As String
        Dim rdr As OleDbDataReader

        Dim cnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\mobilestore.accdb;Persist Security Info=False;")
        Dim cmd As OleDbCommand = New OleDbCommand("Select * from logindata where Username= '" & TextBox1.Text & "' and password='" & TextBox2.Text & "'", cnn)

        'NoAcc = TextBox1.Text
        'NoPas = TextBox2.Text



        cnn.Open()
        rdr = cmd.ExecuteReader


        If (rdr.Read()) Then

            NoAcc = rdr("Username")
            NoPas = rdr("password")

            If (TextBox1.Text = NoAcc And TextBox2.Text = NoPas) Then
                Adminpage.Show()
                Me.Hide()
            Else
                MsgBox("Incorrect Username/Password")
                TextBox1.Clear()
                TextBox2.Clear()


            End If





        End If
    Catch
        MsgBox("Error logging in, please try again", MsgBoxStyle.Exclamation)
    End Try
End Sub

回答by teena gupta

here is the code:

这是代码:

Imports System.Data
Imports System.Data.OleDb
Public Class Form5
    Inherits System.Windows.Forms.Form
    Dim mypath = Application.StartupPath & "\login.mdb"
    Dim mypassword = ""
    Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mypath & ";Jet OLEDB:Database Password=" & mypassword)
    Dim cmd As OleDbCommand

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.Hide()
        Dim sql = "SELECT UserID ,PassID FROM MYTAB WHERE USERID='" & TextBox1.Text & "' AND PASSID='" & TextBox2.Text & "'"

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

        Try
            If dr.Read = False Then
                MessageBox.Show("Authentication failed...")
                Me.Show()
            Else
                MessageBox.Show("Login successfully...")
                Dim frmDialogue As New Form11

                frmDialogue.ShowDialog()
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        conn.Close()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Close()
    End Sub


    Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        Me.Hide()
        Dim frmDialogue As New Form1

        frmDialogue.ShowDialog()
    End Sub


    Private Sub Form5_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        Dim frm As New Form1
        frm.Show()
    End Sub
End Class

回答by tobrien

You could have BOTH the uname and pword in the database and "WHERE" on both, if you get no record back, then you have your answer.

您可以在数据库中同时使用 uname 和 pword,并且在两者上都使用“WHERE”,如果您没有得到任何记录,那么您就有了答案。

回答by Kangkan

Try using System.String.Compare(String str1,String str2, Boolean ) As Integerlike:

尝试使用System.String.Compare(String str1,String str2, Boolean ) As Integer像:

If (System.String.Compare(TextBox4.Text, NoAcc, false) And System.String.Compare(TextBox3.Text, NoPas, false)) Then NoAccmod2 = NoAcc