Code en c#

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

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
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# 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
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# 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
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# 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
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# 
Messages postés
225
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
21 mai 2009

merci pour tous
est ce que je veux supprimer l'un des deux?
Messages postés
427
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
29 janvier 2008
1
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
Messages postés
225
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
21 mai 2009

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");

              
          }
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
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# 
Messages postés
225
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
21 mai 2009

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.
Messages postés
225
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
21 mai 2009

donc c'est quoi la solution? je suis vraiment perdu
merci  
Messages postés
225
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
21 mai 2009

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.
Messages postés
225
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
21 mai 2009

non c'est bon c'est bien marchée comme j'ai vous à dit.
merci pour votre aide.