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 :

Chercher une valeur dans une base de données (MYSQL) via C#


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut Chercher une valeur dans une base de données (MYSQL) via C#
    Bonsoir,

    J'ai un bout de code qui cherche une valeur dans une table :

    http://pastebin.com/5NdVhWNz

    Le fonctionnement est très simple, ça cherche un identifiant dans une table, s'il y est ça prend le nombre marqué dans fldSolde et l'affecte à la variable iSoldeRestant.

    Sur le même principe j'ai maintenant créé un code qui vérifie si un identifiant se trouve dans une table et s'il y est il cherche ce qui est marqué dans fldMotDePasse dans la ligne de l'identifiant concerné (1 identifiant = 1 mot de passe) :

    http://pastebin.com/M0HzahW3

    Je vous ais mis la fonction de recherche, en faite j'initialise Admin en false, je lance une première fois la fonction, si l'identifiant est trouvé ça renvoie true, cela fonctionne, ensuite Admin est passé à true et ça relance la fonction. Cette fois ça doit cherche le mot de passe stocké dans la base de données (MdpBD) et le comparé au mot de passe saisie dans le logiciel (MdpChiffre) et si c'est égal ça renvoie true, sinon ça renvoie false.

    Le problème c'est que MdpBD lorsque le code

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    MdpBD = Convert.ToString(maCommandeRecherche.ExecuteScalar());

    est executé est égal à Champ que j'ai passé en argument à la fonction et non égal au mot de passe stocké dans la base de données.

    Les deux codes se ressemblent tellement mais le second ne fonctionne pas.

    Pouvez vous jeter un coup d'oeil ?

    Merci d'avance

    PS :

    Voici ce qui lance la fonction :


    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(Recherche("fldidentifiant") == false)
                    mainForm.labelConnecteAdm.Text = "Non connecté, vous n'êtes pas un admin";
                else
                {
                    MdpChiffre = getMd5Hash(textBox1.Text);
                    Admin = true;
                    if(Recherche("fldMotDePasse") == true)
                        mainForm.labelConnecteAdm.Text = "Connecté";
                    else
                        mainForm.labelConnecteAdm.Text = "Non connecté, mot de passe incorrecte";
                }

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut
    Bonjour,

    J'ai réécris le bout de code et je l'ai simplifié en créant 2 try ... catch :

    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
     
                maRequeteRechercheID = "SELECT fldIdentifiant FROM tbladmin WHERE fldIdentifiant = @Id";
                maCommandeRechercheID = new MySqlCommand(maRequeteRechercheID, maConnexion);
                maCommandeRechercheID.Parameters.Add(new MySqlParameter("@Id", MySqlDbType.String, 11));
                try { maCommandeRechercheID.Parameters["@Id"].Value = Convert.ToInt32(mainForm.textBoxResultatAdm.Text); }
                catch { mainForm.labelErreurCodeAdm.Text = "Code barre ou QR code invalide"; }
     
                maRequeteRechercheMDP = "SELECT fldMotDePasse FROM tbladmin WHERE fldIdentifiant = @Id";
                maCommandeRechercheMDP = new MySqlCommand(maRequeteRechercheMDP, maConnexion);
                maCommandeRechercheMDP.Parameters.Add(new MySqlParameter("@Id", MySqlDbType.String, 11));
                try { maCommandeRechercheMDP.Parameters["@Id"].Value = Convert.ToInt32(mainForm.textBoxResultatAdm.Text); }
                catch { mainForm.labelErreurCodeAdm.Text = "Code barre ou QR code invalide"; }
     
                    try
                    {
                        maCommandeRechercheID.Connection.Open();
                        if (maCommandeRechercheID.ExecuteScalar() == null)
                        {     
                            Admin = false;
                            mainForm.labelConnecteAdm.Text = "Non connecté, vous n'êtes pas un admin";
                            maCommandeRechercheID.Connection.Close();
                        }
                        else
                        {
                            Admin = true;
                            maCommandeRechercheID.Connection.Close();
                        }
                    }
     
     
                    catch { MessageBox.Show("Erreur au niveau de la requête de recherche de l'identifiant"); }
     
                if(Admin == true)
                {
                    MdpChiffre = getMd5Hash(textBox1.Text);
                    try
                    {
                        maCommandeRechercheMDP.Connection.Open();
                        maCommandeRechercheMDP.ExecuteNonQuery();
                        MdpBD = Convert.ToString(maCommandeRechercheMDP.ExecuteScalar());
                        if(MdpBD == MdpChiffre)
                            mainForm.labelConnecteAdm.Text = "Connecté";
                        else
                            mainForm.labelConnecteAdm.Text = "Non connecté, mot de passe incorrecte";
     
                            maCommandeRechercheMDP.Connection.Close();                   
                    }   
                    catch { MessageBox.Show("Erreur au niveau de la requête de recherche du mot de passe"); }
                }
    Le premier try ... catch sert à vérifier si l'identifiant se trouve dans la table regroupant les identifiants administrateurs, le second try ... catch sert à vérifier si le mot de passe saisie est identique au mot de passe stocké dans la base de données.

    Pour ceux qui se demandent d'où vient le mainForm :

    Le C# ne permet pas l'ouverture d'une fenêtre avec une zone de saisie de texte, il faut donc rajouter une form au projet et créer à l'intérieur de celle-ci une zone de saisie.

    Je ne savais même pas que c'est faisable et j'ai tout fait à partir de ce tuto :
    http://msdn.microsoft.com/fr-fr/libr...(v=vs.90).aspx, j'ai facilement compris donc je pense vous aussi.

    Etant donné que mon code fonctionne maintenant, je met la discussion en résolu.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,
    Pour info,
    Citation Envoyé par encoremoi21258 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                try { maCommandeRechercheID.Parameters["@Id"].Value = Convert.ToInt32(mainForm.textBoxResultatAdm.Text); }
                catch { mainForm.labelErreurCodeAdm.Text = "Code barre ou QR code invalide"; }
    Il est préférable de ne pas traiter les erreurs prévisibles par un try - catch (pour des raisons de performance)
    Les exceptions sont faites pour gérer les erreurs non prévues. (donc laisser le try - catch en cas d'erreur imprévue, mais)
    Dans ce cas tu peux utiliser l'instruction Int32.TryParse, méthode.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Tout à fait d'accord avec rv26t. Voici un lien intéressant pour approfondir sur le sujet : Comprendre la philosophie des exceptions sous .NET.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Réponses: 8
    Dernier message: 15/02/2014, 01h30
  3. [MySQL] Update d'une table dans la base des données mysql php
    Par glodybiss4 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/02/2012, 16h51
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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