2016-04-26 8 views
-1

皆さんを悩ませて申し訳ありませんが、私は質問することがありました。私は現在、アクセスデータベースにあるユーザーがログインできるコードを実行していますが、コードは機能していますが、デバッグ時には1人のユーザーしか使用できず、別のユーザーアカウントを使用してログインしようとしますログインが無効で、理由がわかりません。誰かが私が間違っていることを指摘することを願っています。 ここに私のコードです。私は、ユーザーIDとUserPwdを使用してログイン enter image description herevb.netのユーザーログインWindowsフォーム

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 

は、ここに私のデータベースです。私は別のフォームでそれを使用することができます私はUserIDを保存する方法はありますか?事前にありがとう

+0

質問のコードを編集しないでください。既存の回答が無効になり、訪問者が理解しにくくなります。 –

答えて

0

あなたは常にユーザ名/パスワードのリスト全体を読んでいます!それが返された最初の行だからあなたが最初のユーザーとしてログインすることができます

SELECT UserID, UserPwd FROM UserProf_table 

WHERE UserId = ??? 

: あなたは内WHERE句を忘れてしまいました!

Visual Studioを使用している場合は、

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

また:

+0

ここでは、 "SELECT UserID、UserPwd FROM UserProf_table WHERE UserID = '"&idbox.Text& "' AND UserPwd = '"&pwdbox.Text& "'"に変更しましたが、(dr = cmd.ExecuteReader) –

-1

は、あなただけの1レコードを取得するために、あなたのSQLコマンドを変更する必要があります[また、プレーンテキストとしてパスワードを保存しないでください]デバッグモードで「Watch and QuickWatch Windows」を使用して変数を表示し、期待値を返すことができます。 https://msdn.microsoft.com/en-us/library/0taedcee.aspx

関連する問題