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:
Pour éviter les messageBox d'erreur identification 1 puis 2, j'ai ajouté un Exit Sub.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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
Partager