IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

C# Sql value champ


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Par défaut C# Sql value champ
    Bonjour, jai un probleme pour recepere les valuers de sql avec select pour valider une authentification mais sa marche pas dans le test ,
    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
     
    {
                    MySqlConnection connection = new MySqlConnection(Conn);
                    MySqlCommand commandselect = connection.CreateCommand();
                    MySqlDataReader Readerselect;
                    //utilisatuer
                    commandselect.CommandText = "select LoginU, PasswordU from utilisateur";
                    connection.Open();
                    Readerselect = commandselect.ExecuteReader();
                    string login = LoginCon.Text;
                    string password = PasswordCon.Text;
                    //MessageBox.Show(login.ToString());
     while (Readerselect.Read())
    {    
    for (int i = 0; i < Readerselect.FieldCount; i++)
                        {
     
     
     
                    if (Readerselect["LoginU"] == login && Readerselect["PasswordU"] == password) //erreur vient d'ici
                    {
                        MessageBox.Show("heyyy connexion reussi");
                    }
                    else
                    {
                        MessageBox.Show("connexion echoué");
                    }
    }
    Readerselect.Close();
     
                    connection.Close();

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par bacarndiaye Voir le message
    mais sa marche pas dans le test ,

    Euh... c'est un jeu ? On doit deviner le problème ?

    Non parce que si tu ne dis pas ce qui marche pas, on va pas pouvoir faire grand chose pour toi...

    Qu'est-ce qui se passe ? Erreur de compilation ? Exception à l'exécution ? Quelle message d'erreur ? Pile de l'exception ? Tout ça tout ça quoi...

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Par défaut
    jai un probleme pour tester les variable saisi avec ceux renvoyer par le sql sur la condition if , je sais pas comment le reecrire parceke sur mon example il sagit pas de tester avec tous les champ mais avec deux champ specifique login et password

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Readerselect["LoginU"] == login && Readerselect["PasswordU"] == password)
    desolé de ne pas avoir été claire

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par bacarndiaye Voir le message
    jai un probleme pour tester les variable saisi avec ceux renvoyer par le sql sur la condition if , je sais pas comment le reecrire parceke sur mon example il sagit pas de tester avec tous les champ mais avec deux champ specifique login et password

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Readerselect["LoginU"] == login && Readerselect["PasswordU"] == password)
    desolé de ne pas avoir été claire
    C'est toujours pas très clair mais bon...

    Il y a plusieurs trucs qui ne vont pas dans ton code :
    • D'abord, la requête : il ne faut pas que tu sélectionnes toutes les lignes de la table, mais seulement celle qui correspond au login recherché. Donc il faut que tu rajoutes un WHERE dans la requête :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      ...
      commandselect.CommandText = "select LoginU, PasswordU from utilisateur where LoginU = @login";
      commandselect.Parameters.Add("@login", MySqlDbType.VarString).Value = login;
      ...
    • Quand tu as trouvé la ligne qui correspond, il faut sortir du while ; et encore, en principe il ne devrait y avoir qu'une seule ligne avec un login donné, donc il n'y a pas besoin de faire une boucle, un if est suffisant :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      if (Readerselect.Read())
      {    
          ...
      }
      else
      {
          MessageBox.Show("ce login n'existe pas");
      }
    • Seules les colonnes LoginU et PasswordU t'intéressent, donc ça ne sert à rien de faire une boucle for qui parcourt toutes les colonnes (d'ailleurs dans ton code tu n'utilises jamais la variable i de la boucle, c'est bien la preuve que tu n'en as pas besoin...)
    • Pour finir, la façon de comparer les chaines n'est pas correcte : Readerselect["LoginU"] renvoie un object, donc si tu compares avec une chaine avec l'opérateur ==, ça va faire une comparaison par référence, et ça va renvoyer false même si les valeurs sont en fait égales. Il faut faire un cast de Readerselect["LoginU"] en string avant de comparer :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if ((string)Readerselect["LoginU"] == login && (string)Readerselect["PasswordU"] == password)


    Pour finir, une petite remarque (qui n'est pas la cause de ton problème) : normalement on ne stocke pas un mot de passe en clair dans la base de données. On stocke son "hash", une valeur calculée avec un algorithme comme MD5 ou SHA1. Pour vérifier si le mot de passe donné par l'utilisateur est correct, on calcule aussi son hash, et on vérifie que ça correspond bien à celui qui est dans la base de données. Tu trouveras des exemples un peu partout sur la façon de calculer le hash.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Par défaut
    Merci, ton explication va beaucoup m'aider pour la suite de mon apprentissage sur C#.
    je vais suivre tes explication pour résoudre mon problème


    Citation Envoyé par tomlev Voir le message
    C'est toujours pas très clair mais bon...

    Il y a plusieurs trucs qui ne vont pas dans ton code :
    • D'abord, la requête : il ne faut pas que tu sélectionnes toutes les lignes de la table, mais seulement celle qui correspond au login recherché. Donc il faut que tu rajoutes un WHERE dans la requête :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      ...
      commandselect.CommandText = "select LoginU, PasswordU from utilisateur where LoginU = @login";
      commandselect.Parameters.Add("@login", MySqlDbType.VarString).Value = login;
      ...
    • Quand tu as trouvé la ligne qui correspond, il faut sortir du while ; et encore, en principe il ne devrait y avoir qu'une seule ligne avec un login donné, donc il n'y a pas besoin de faire une boucle, un if est suffisant :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      if (Readerselect.Read())
      {    
          ...
      }
      else
      {
          MessageBox.Show("ce login n'existe pas");
      }
    • Seules les colonnes LoginU et PasswordU t'intéressent, donc ça ne sert à rien de faire une boucle for qui parcourt toutes les colonnes (d'ailleurs dans ton code tu n'utilises jamais la variable i de la boucle, c'est bien la preuve que tu n'en as pas besoin...)
    • Pour finir, la façon de comparer les chaines n'est pas correcte : Readerselect["LoginU"] renvoie un object, donc si tu compares avec une chaine avec l'opérateur ==, ça va faire une comparaison par référence, et ça va renvoyer false même si les valeurs sont en fait égales. Il faut faire un cast de Readerselect["LoginU"] en string avant de comparer :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if ((string)Readerselect["LoginU"] == login && (string)Readerselect["PasswordU"] == password)


    Pour finir, une petite remarque (qui n'est pas la cause de ton problème) : normalement on ne stocke pas un mot de passe en clair dans la base de données. On stocke son "hash", une valeur calculée avec un algorithme comme MD5 ou SHA1. Pour vérifier si le mot de passe donné par l'utilisateur est correct, on calcule aussi son hash, et on vérifie que ça correspond bien à celui qui est dans la base de données. Tu trouveras des exemples un peu partout sur la façon de calculer le hash.

  6. #6
    Nouveau candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 2
    Par défaut
    Essayer la méthode Convert.ToString(......);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SQL : Nouveau Champ - valeur par défaut
    Par chim33 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/06/2006, 14h41
  2. [SQL] un champ Timestamp ou deux champs Date et Heure?
    Par davmaster62 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 25/02/2006, 23h04
  3. [SQL] select champ 5-ème caractère = "D"
    Par mlequim dans le forum Langage SQL
    Réponses: 5
    Dernier message: 05/09/2005, 17h15
  4. Pb sur une requête SQL (de champ vide)
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/07/2004, 11h12
  5. [sql] [jointure] champs = substring(champs,1,5)
    Par DaxTaz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/05/2004, 12h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo