2016-04-26 14 views
-1

Es tut mir leid, Sie zu stören, aber ich hatte eine Frage zu stellen. Ich mache gerade ein Programm, wo Benutzer, die in der Access-Datenbank sind, einloggen können, der Code funktioniert, aber das Problem ist, dass wenn ich debuggen kann ich mich nur mit 1 Benutzer anmelden, wenn ich versuche mich mit einem anderen Benutzerkonto anzumelden Login ungültig und ich bin mir nicht sicher warum. Ich hoffe, dass jemand auf etwas hinweisen kann, was ich falsch mache; Hier ist mein Code;Benutzeranmeldung in vb.net Windows Form

Imports System.Data.OleDb 'provides classes to connect to the database 
Imports System.Data 
Imports System.IO 

Public Class Login 
Dim conn As New OleDbConnection 
Dim cmd As New OleDbCommand 

Function getcount() As Integer 
    Using conn As New OleDb.OleDbConnection _ 
("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Application.StartupPath & "\User.mdb") 
     'provider to be used when working with access database 
     conn.Open() 
     Dim cmd As New OleDb.OleDbCommand("Select COUNT(*) FROM UserProf_table", conn) 
     Return cmd.ExecuteScalar() 
    End Using 
End Function 

Private Sub Login_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    conn = New OleDbConnection 
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Application.StartupPath & "\User.mdb" 
    conn.Open() 

    If getcount() = 1 Then 
     btnReg.Visible = False 
    Else 
     btnReg.Visible = True 
    End If 
    MsgBox(conn.State.ToString()) 'to check connection 
End Sub 

Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click 
    Dim idbx As String ' noted that ID is numbers 
    Dim pwd As String 

    idbx = idbox.Text 
    pwd = pwdbox.Text 
    With cmd 
     'Open Connection for executereader 
     If Not conn.State = ConnectionState.Open Then 
      conn.Open() 
     End If 

     'initialized database connection 
     .Connection = conn 

     .CommandText = "SELECT UserID, UserPwd FROM UserProf_table WHERE UserID = '" & idbox.Text & "' AND UserPwd = '" & pwdbox.Text & "'" 

     Dim dr As OleDbDataReader 
     dr = cmd.ExecuteReader 


     If dr.HasRows Then 
      dr.Read() 
      If idbx = dr.Item("UserID") And pwd = dr.Item("UserPwd") Then 
       idbx = SystemInformation.UserName 
       mainForm.Show() 
       Me.Hide() 
      Else 
       MsgBox("Password or username is incorrect") 
       idbox.Clear() 
       pwdbox.Clear() 
      End If 
      dr.Close() 

     End If 
    End With 
    'close connection 
    conn.Close() 
End Sub 

Private Sub btnReg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReg.Click 
    registerForm.Show() ' Register form 
    Me.Hide() 
End Sub 
End Class 

Hier ist meine Datenbank: enter image description here

Ich Login in der Benutzer-ID und USERPWD verwenden. Und gibt es eine Möglichkeit für mich, die UserID zu speichern, damit ich sie in anderer Form verwenden kann? Vielen Dank im Voraus

+0

Bitte bearbeiten Sie den Code Ihrer Frage nicht an Ort und Stelle. Es macht existierende Antworten ungültig und macht es den Besuchern schwer zu verstehen. –

Antwort

0

Sie lesen immer die ganze Benutzername/Passwort-Liste! Sie haben vergessen, eine WHERE Klausel in:

SELECT UserID, UserPwd FROM UserProf_table 

WHERE UserId = ??? 

Sie können als erste Benutzer anmelden, weil es die erste Zeile zurückgegeben ist!

[auch: bitte nicht speichern Passwörter als Klartext]

+0

ich änderte es jetzt zu "SELECT UserID, UserPwd VON UserProf_table WHERE UserID =" "& idbox.Text &" 'AND UserPwd =' "& pwdbox.Text &" "" aber es gibt einen Fehler in (dr = cmd.ExecuteReader) –

-1

Sie sollten Ihren SQL-Befehl ändern, dass nur 1 Datensatz abzurufen:

.CommandText = "SELECT UserID,UserPwd FROM UserProf_table WHERE UserId =" + idbx.trim() 

Außerdem, wenn Sie Visual Studio verwenden Sie können "Watch und QuickWatch Windows" im Debug-Modus verwenden, um Ihre Variablen anzuzeigen und sicherzustellen, dass sie die erwarteten Werte zurückgeben. https://msdn.microsoft.com/en-us/library/0taedcee.aspx