ahlemlo
Messages postés225Date d'inscriptionsamedi 7 avril 2007StatutMembreDernière intervention21 mai 2009
-
28 mai 2007 à 09:39
ahlemlo
Messages postés225Date d'inscriptionsamedi 7 avril 2007StatutMembreDernière intervention21 mai 2009
-
28 mai 2007 à 12:00
bonjour à tous,
nous voulons faire une connexion à la base sqlserver2005 pour vérifier les élémants d'authentification que nous avons saisi dans la formulaire avec celle dans la base.
voici le code et l'erreure:
SqlCommand command = new SqlCommand("SELECT * FROM uti", conn);
SqlDataReader data = command.ExecuteReader();
while (data.Read())
{try{ if (texttype.Text data["fonction"].ToString() && textlogin.Text data["login"].ToString() && textpwd.Text == data["pwd"].ToString())
{
// Le user est trouvé dans la BD.
Form2 p1 = new Form2();
p1.Show();
}
}
catch (Exception erreur)
{
MessageBox.Show(erreur.Message
, "vérifier votre mot de passe"
, MessageBoxButtons.OK
, MessageBoxIcon.Error);
}
}
data.Close();
conn.Close();
}
l'erreur généré est le suivante:
"Error 1 The type 'System.Data.SqlClient.SqlConnection' exists in both 'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll' and 'c:\Documents and Settings\admin\Mes documents\Visual Studio 2005\Projects\parc\parc\bin\Debug\System.Data.SqlClient.dll' C:\Documents and Settings\admin\Mes documents\Visual Studio 2005\Projects\parc\parc\Form1.cs"
pouvez vous m'aider svp.
merci
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 28 mai 2007 à 10:12
Enleve celle qui se trouve ici :
'c:\Documents and Settings\admin\Mes documents\Visual Studio 2005 Projects\parc\parc\bin\Debug\System.Data.SqlClient.dll'
Si ton projet (dans videual studio) y fait aussi référence, enleve la aussi.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 28 mai 2007 à 11:39
C'est normal, tu es dans un while()
Donc il boucle sur toutes les données que ta requete va te retourner, qu'elles correspondent a ton login ou non.
C'est pour cela que tu vois les 2 fenetres apparaitre. Les MessageBox quand la boucle rencontre les mauvais login&password et une fois la bonne fenetre quand il rencontre les bonnes infos.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 28 mai 2007 à 11:54
Tu fais comme je t'ai dit : tu modifies ta requete afin d'y identifier directement l'utilisateur (avec clauses WHERE).
Puis plutot que de faire ExecuteReader avec ton SqlCommand, tu utilises la méthode ExecuteScalar(). Tu castes l'objet retourné en int, si c'est 0, pas d'authentification, si c'est 1, c'est que l'utilisateur a fourni ses bon credentials.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 28 mai 2007 à 09:51
Salut
tu n'as pas 2 fois la dll System.Data.dll de référencée dans ton projet ?
Celle qui se trouve dans le dossier de ton projet n'a a priori rien a y faire.
Mx
MVP C#
Vous n’avez pas trouvé la réponse que vous recherchez ?
bernie666
Messages postés427Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention29 janvier 20081 28 mai 2007 à 10:12
Salut, en regardant rapidement ton code => pour optimisé tout ca je te conseil d'utiliser la méthode ExecuteScalar et non ExecuteReader pour ce genre de traitement
ahlemlo
Messages postés225Date d'inscriptionsamedi 7 avril 2007StatutMembreDernière intervention21 mai 2009 28 mai 2007 à 10:59
c'est bien passé mais:
le problème est lorsque je donne des informations correctes il passe à
la 2iéme fenêtre mais avec l'affichage de ce message "
MessageBox.Show("vérifier votre informations");"
par contre lorsque je lui donne les informations incorrectes c'est bien passé.
voici le code
while (data.Read())
{ if (texttype.Text data["fonction"].ToString() && textlogin.Text data["login"].ToString() && textpwd.Text == data["password"].ToString())
{
// Le user est trouvé dans la BD.
Form2 p1 = new Form2();
p1.Show();
}
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 28 mai 2007 à 11:11
Pourquoi ramener toutes les lignes et colonnes de ta base de données, alors que tu pourrais directement filtrer au niveau de ta requete ?
A savoir quelques chose comme ca (basiquement) :SELECT count(login) FROM taTable WHERE login (valeur de la textbox du login) AND password (valeur de la textbox du password)
Ensuite tu n'as plus qu'a voir si la valeur du count() est 0 ou 1.
Si le password pouvait etre hashé ce serait bien (mais ca ca depend des valeurs dans ta base bien sur), et si tu pouvais faire tout ca dans une requete paramétrée ce serait bien aussi. Enfin bref, faire les choses le plus sécurisé possible.
ahlemlo
Messages postés225Date d'inscriptionsamedi 7 avril 2007StatutMembreDernière intervention21 mai 2009 28 mai 2007 à 11:35
vous m'avez pas compris on à fait tous ça.
l'exécution c'est bien passé il n'a pas d'erreur juste l'exécution est fausse losque je saisi le login et le password juste il faut q'il passe à la deuxiéme fenêtre mais maintenant il passe à la deuxiéme fenêtre et la fenêtre d'erreur en même tempts malgré il faut que la fenêtre d'erreur s'affiche que losque je saisi le password et le logine fausse.
j'éspert que vous m'avais compris.
en tous cas merci a vous.
ahlemlo
Messages postés225Date d'inscriptionsamedi 7 avril 2007StatutMembreDernière intervention21 mai 2009 28 mai 2007 à 11:55
ooohh vraiment merci c'est bon j'ai trouver la solution c'est bien passée je te remercie 10000 fois.
on a enlever le while et c'est bien passé.
merci un autre fois et désolé de tous.