Aide pour compréhension fonctionnement un sys de login
Bonjour,
Aprés avoir couché mon besoin sur le papier, j'ai commencé le code.
Le form:
Un textbox : txtLogin
Un textbox : txtPassword
Un bouton : OK
Le contexte: L'utilisateur doit se connecter à un MDI pour paramétrer. Mais avant de pouvoir y accéder, il utilisera un systeme de login/mdp en interface avec une base MySQL + VB2005 express.
Le probleme:
Le systeme de login fonctionne mais je n'arrive pas à corriger le fonctionnement du soft dans le cas ou on entre un mauvais login/mdp, ie sans utiliser le Try.
Si la valeur de txtLogin est correct, ie dans la base, j'utilise bien la condition de ma boucle While.
Voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
Imports MySql.Data.MySqlClient
'Déclaration
Dim conn As New MySqlConnection
Dim myCommand As New MySqlCommand
Dim RequeteSQLogin As String
Dim myReader As MySqlDataReader
Dim MyAdapter As MySqlDataAdapter
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
'Création de la chaîne de connexion
conn = New MySqlConnection()
conn.ConnectionString = "server=localhost;user id=root;password=root;database=test;"
'Ouvre le piège
Try
'Ouverture de la connexion
conn.Open()
'Requete SQL
RequeteSQLogin = "SELECT u.password FROM user u WHERE BINARY (u.username = '" & txtLogin.Text & "')"
'Ouvre le piège
Try
'Execution de la requete
myCommand = New MySqlCommand(RequeteSQLogin, conn)
myReader = myCommand.ExecuteReader
'Lecture du résultat de la requete
While myReader.Read
'Test du login & mdp
If myReader.GetString(0) = txtPassword.Text Then
MessageBox.Show("Connection Opened Successfully : " & txtLogin.Text)
System.Threading.Thread.Sleep(500)
Dim mainForm As New MDIParent1
mainForm.Show()
conn.Close()
Me.Hide()
Me.Close()
Exit Sub
Else
MessageBox.Show("Erreur identification 1")
txtLogin.Clear()
txtPassword.Clear()
conn.Close()
Exit Sub
End If
End While
Catch myerror As MySqlException
MsgBox("There was an error reading from the database: " & myerror.Message)
Finally
'Fermeture
conn.Dispose()
End Try
Catch myerror As MySqlException
txtLogin.Clear()
txtPassword.Clear()
MessageBox.Show(myerror.Message, "Error Connecting to Database", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
'Fermeture
conn.Dispose()
End Try
MessageBox.Show("Erreur identification 2")
txtLogin.Clear()
txtPassword.Clear()
'Fermeture
conn.Close()
End Sub |
Pour éviter les messageBox d'erreur identification 1 puis 2, j'ai ajouté un Exit Sub.
Mes questions:
Pourquoi quand j'entre un mauvais login/mdp, je tombe sur le messageBox 2 sans utiliser le Else du If dans ma boucle While ?
Je pense que ma requete SQL dans le cas d'un mauvais login et d'un mauvais mdp tombe de fait en erreur. Comment tester sans le Try que je trouve assez "vilain" ?
Merci de votre aide.
@+
Oulahoup