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

ASP.NET Discussion :

[C#] Plantage de GetString() du DataReader si donnée nulle


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 8
    Par défaut [C#] Plantage de GetString() du DataReader si donnée nulle
    Bonjour,

    J'ai un formulaire avec une vingtaine de champs, dont certains sont facultatifs.
    L'enregistrement ne me pose pas de problème, mais lorsque je veux récupérer les données pour la modification, j'ai deux cas de figure :

    1 - Tous les champs ont été remplis et ça se passe bien.
    2 - Certains champs n'ont pas été saisis et j'obtiens une erreur à la récupération.

    Unable to cast object of type 'System.DBNull' to type 'System.String'.
    Pour récupérer les données je procède comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Déclaration du datareader
    OdbcDataReader dr = cmd.ExecuteReader();
    dr.Read();
    // Affectation au champ du formulaire
    txtMonChamp.Text = dr.GetString(indice dans le SELECT);
    Quelle est la méthode à utiliser pour contourner ce problème ?
    Je me vois mal faire 20 tests de champs...

    Merci !

  2. #2
    Membre confirmé Avatar de boleduch
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    Hello,

    Tu peux faire un truc dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txtMonChamp.Text = ( dr.GetString(i) != null ) ? dr.GetString(i) : String.Empty ;

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 8
    Par défaut
    Zut ça me fait exactement la même erreur

    Je pense qu'il n'arrive pas à détecter le "null".
    Si je me fie à l'erreur il est de type DBNull mais on ne peut pas faire de comparaison de valeur avec ça...

    Merci pour ton aide en tout cas.

  4. #4
    Membre confirmé Avatar de boleduch
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    Tu es sur de pas pouvoir faire de comparaison ? Si tu remplace null par DBNull.Value ca marche pas non plus ?

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 8
    Par défaut
    Hélas oui, voilà l'erreur :

    Operator '!=' cannot be applied to operands of type 'string' and 'System.DBNull'
    Je suis à peu près certain que c'est ça puisque l'affectation de String.Empty à un champ fonctionne bien.

  6. #6
    Membre confirmé Avatar de boleduch
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    Si dans le test tu remplaces

    par

    Ca devrait passer.

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 8
    Par défaut
    Yeeeeesssss ça marche enfin !!

    Voilà la syntaxe utilisée pour que ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (dr.GetValue(i).ToString() != null) ? dr.GetValue(i).ToString() : String.Empty;
    Merci bien

  8. #8
    Membre confirmé Avatar de boleduch
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    Cool, content d'avoir pu t'aider!

  9. #9
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    J'ai un peu le mm problème, mais coté HTML. Je rempli un repeater mais qd j'ai une valeur nulle il plante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIF(DataBinder.Eval(Container.DataItem, "Ct_EndDate", "{0}").Length = 0,"Null",Date.FromOADate(Convert.ToDouble(DataBinder.Eval(Container.DataItem, "Ct_EndDate", "{0}"))).ToShortDateString)
    Des idées?

    Merci d'avance.
    "Winter is coming" (ma nouvelle page d'accueil)

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Août 2008
    Messages : 45
    Par défaut
    Bonsoir tout le monde.
    Je viens d'avoir le même problème aujourd'hui.
    Si ça interresse quelqu'un qui aurait le même problème, je l'ai résolu de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Client client = new Client();
    Datareader dr = classe de creation de mon datareader;
    if(dr.isDBNull(int numColonne))
    {
       client.faxClient = dr.GetString(0);
    }
    Voilà peut que ça pourra aider quelqu'un.
    Bonne soirée à tous.
    Thomas D.

  11. #11
    Invité de passage
    Inscrit en
    Mars 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2009
    Messages : 1
    Par défaut
    Citation Envoyé par Snew Voir le message
    Yeeeeesssss ça marche enfin !!

    Voilà la syntaxe utilisée pour que ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (dr.GetValue(i).ToString() != null) ? dr.GetValue(i).ToString() : String.Empty;
    Merci bien
    Moi aussi j'avais le même problème , et maintenant ca marche avec ta solution Merci Snew
    Citation Envoyé par boleduch Voir le message
    Cool, content d'avoir pu t'aider!
    MErci

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

Discussions similaires

  1. Plantage copie d'une base de donnée
    Par beb1982 dans le forum Microsoft BI
    Réponses: 4
    Dernier message: 30/06/2009, 14h51
  2. Plantage d'un serveur > migration des données
    Par cedtic dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 15/10/2007, 16h00
  3. [Debutant] Données nulles de JSP vers Servlet method Post
    Par tck-lt dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 18/12/2006, 11h53
  4. données NULL sous SQL
    Par pschmidtke dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 05/07/2006, 18h14
  5. [MySQL] problème d'insertion d'une donnée nulle
    Par unmulot dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/06/2006, 16h49

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