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# MySql : condition if : l'enregistrement n'existe pas [Débutant]


Sujet :

C#

  1. #1
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut C# MySql : condition if : l'enregistrement n'existe pas
    Bonjour,
    j'ai une table :
    nom prenom Statut
    toto TATA User
    momo MAMA Invit
    Je fais une requête MySql avec le nom, pour affecter ma variable 'statuts'
    Si l'enregistrement existe (nom = toto ou nom = momo), ma variable 'statuts' a la valeur de sa colonne
    donc soit 'User' soit 'Invit'

    Jusqu'au ici, tout va bien et tout marche sans problème, voici 2 versions :
    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
    MySqlCommand cmd = new MySqlCommand(sqlReq, connexion);
     
    MySqlDataReader donneReader = cmd.ExecuteReader();
     
    while (donneReader.Read())
    {
    	statuts_cherche = (string)donneReader["nom"];  // 1er version marche
     
    		if (statuts_cherche != null)
    		{
    			statuts = (string)donneReader["Statut"];
    		}
    		else
    		{
    			statuts = "futur";
     
    		}
     
    		// et voici 2e version aussi marche 
     
    		if (String.IsNullOrEmpty(statuts_cherche))
    		{
    			statuts = "futur";
    		}
    		else
    		{
    			statuts = (string)donneReader["Statut"];
     
    		}
     
     
    }
    Par contre, s'il l'enregistrement n'existe pas il faut que la variable 'statuts' a la valeur 'futur'
    Je n'arrive pas affecter la variable 'statuts' par 'futur' : vide sans valeur.

    J'ai aussi changé la condition avec plusieurs tentatives suivantes, mais sans succès :

    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
    	   if (statuts_cherche != " ")
    	   //...
     
    	   if (statuts_cherche != "")
    		 //...
     
    		if (statuts_cherche == String.Empty)
    		 //...
     
    		if (statuts_cherche == null)
    		 //...
     
    		if (String.IsNullOrEmpty(statuts_cherche))
    		 //...
     
    		if (string.IsNullOrEmpty(statuts_cherche) == true)
    		//...
    Que je dois faire ?

    Merci

  2. #2
    Membre chevronné Avatar de Julien698
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Par défaut
    Salut,

    D'après ce que j'ai compris, tu cherches à savoir si un enregistrement existe ou non dans ta base, si oui tu laisses la ligne telle qu'elle est, sinon tu crées un nouveau utilisateur avec le statut futur.

    Tu as deux requêtes à réaliser :
    la première : tu fais le test si ton utilisateur existe ou non : SELECT IF( EXISTS( ta requête )) ça va te retourner un booléen.

    Si tu as 0 en retour, tu fais un INSERT avec le nouvel utilisateur + le statut futur.

  3. #3
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut
    Bonjour Julien698,

    Mais je n'ai rien à enregistrer dans MySql... Je veux simplement affecter ma variable 'statuts' pour afficher sur l'écran...


    Si la personne existe dans ma table, je l'affiche son nom avec son statut sinon je vais mettre 'futur' comme son statut...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Par défaut
    tu as essayé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (string.IsNullOrEmpty(donneReader["nom"].toString()))
    {
               statuts = (string)donneReader["Statut"];                                
    }
    else
    {
           statuts = "futur";                              
    }

  5. #5
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut
    Bonjour laoho,

    J'ai essayé ton code
    Citation Envoyé par laoho Voir le message
    tu as essayé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (string.IsNullOrEmpty(donneReader["nom"].toString()))
    mais j'ai le message d'erreur :
    CS1061: 'object' ne contient pas une définition pour 'toString' et aucune méthode d'extension 'toString' acceptant un premier argument de type 'object' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?)
    du coup, cela ne fonctionne pas du tout.

    merci

  6. #6
    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 : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Deja on peut noter un probleme de modelisation. Ta colonne "Status" devrait etre remplacee par une nouvelle table de reference, et tu devrais avoir une colonne "StatusId" qui pointe vers cette nouvelle table. C'est ce qu'on appelle la normalisation (voir ici : Bases de données relationnelles et normalisation : de la première à la sixième forme normale).

    Ensuite, je pense que tu dois tester avec la methode IsDbNull pour savoir si tu as un resultat ou non.

    PS: desole pour les fautes et le manque d'accents, je suis sur un clavier US.
    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.

  7. #7
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut
    Bonjour DotNetMatt,

    Dans mon cas, il s'agit d'une petite table donc je n'ai pas encore besoin d'une nouvelle table de référence.
    Par contre, c'est toujours mieux d'en avoir une pour évolution...

    donc j'ai fait un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (!donneReader.IsDBNull(donneReader.GetOrdinal("nom")))
    {
    	statuts = (string)donneReader["Statut"];
    }
    else
    {
    	statuts = "futur";
     
    }
    Lorsque l'enregistrement n'existe pas dans la table, ma variable, statuts, n'est pas affectée par 'futur'

  8. #8
    Membre chevronné Avatar de Julien698
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Par défaut
    As tu fais le débogage pas à pas ? Es-tu sur de bien passer dans le else (pas d'erreur avant) ?

  9. #9
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,
    Tes différentes tentatives testent si un champ est renseigné (non vide, non null etc.) sur un enregistrement, pas si l'enregistrement existe ou non. Si l'enregistrement n'existe pas, tu ne rentre pas dans la boucle while. Il suffit donc d'initialiser ta variable avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    statuts = "futur"
    while (donneReader.Read())
    {
     ...
    }
    Maitenant pour un SqlDataReader il existe un propriété HasRows qui permet de tester si des records ont été retournés.

  10. #10
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut
    Bonjour ebastien,
    Citation Envoyé par ebastien Voir le message
    (...)Si l'enregistrement n'existe pas, tu ne rentre pas dans la boucle while. Il suffit donc d'initialiser ta variable avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    statuts = "futur"
    while (donneReader.Read())
    {
     ...
    }
    Super, merci... Je n'ai pas réalisé ce que tu dis.

    alors je fais comme tu dis et cela marche, un grand merci :

    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
    MySqlCommand cmd = new MySqlCommand(sqlReq, connexion);
     
    MySqlDataReader donneReader = cmd.ExecuteReader();
     
    while (donneReader.Read())
    {
    	statuts = (string)donneReader["Statut"];
     
    }	
     
    donneReader.Close();
    connexion.Close();
     
    if (String.IsNullOrEmpty(statuts))
    	{
    		statuts = "futur";
    	}
    Bonne journée

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

Discussions similaires

  1. Insert si l'enregistrement n'existe pas deja
    Par Joel Pinto Ribeiro dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/12/2012, 13h45
  2. Réponses: 4
    Dernier message: 22/07/2009, 11h52
  3. Réponses: 5
    Dernier message: 15/12/2008, 16h23
  4. Réponses: 1
    Dernier message: 12/02/2008, 17h00
  5. Réponses: 3
    Dernier message: 25/01/2008, 10h36

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