Code en c#

Résolu
ahlemlo Messages postés 225 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 21 mai 2009 - 28 mai 2007 à 09:39
ahlemlo Messages postés 225 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 21 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:

 private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("server=STANDARD\\SQLEXPRESS;Database=parcinfo;uid=sa;pwd=pfe2007;");
            
            conn.Open();

            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

12 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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.

Mx
MVP C# 
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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.

Mx
MVP C# 
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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.

Mx
MVP C# 
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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# 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ahlemlo Messages postés 225 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 21 mai 2009
28 mai 2007 à 10:09
merci pour tous
est ce que je veux supprimer l'un des deux?
0
bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
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
0
ahlemlo Messages postés 225 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 21 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();
                }

                else
             
                    MessageBox.Show("vérifier votre informations");

              
          }
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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.

Mx
MVP C# 
0
ahlemlo Messages postés 225 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 21 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.
0
ahlemlo Messages postés 225 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 21 mai 2009
28 mai 2007 à 11:48
donc c'est quoi la solution? je suis vraiment perdu
merci  
0
ahlemlo Messages postés 225 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 21 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.
0
ahlemlo Messages postés 225 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 21 mai 2009
28 mai 2007 à 12:00
non c'est bon c'est bien marchée comme j'ai vous à dit.
merci pour votre aide.
0
Rejoignez-nous