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#] Exception retour d'un resultat null et probleme de CAST


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 89
    Points : 96
    Points
    96
    Par défaut [c#] Exception retour d'un resultat null et probleme de CAST
    Bonjour,
    j'ai un probleme avec mon code.

    Donc voici mon mon probleme :
    j'execute une requete sql, et mon code marche tres bien si la requette retourn un resultat. Si la requete retourne nul j'ai droit a une exeption:

    SqlNullValueException was unhandled by user code
    Data is Null. This method or property cannot be called on Null values.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MyReader = MyCommand.ExecuteReader();
    if (MyReader.HasRows)
    {
           MyReader.Read();
           CartSum = MyReader.GetInt32(0);
    }
    comment je peut faire pour que ca fonctionne ?
    ou bien pour que ca me retourne 0 au lieu de null

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Salut,

    Tu peux faire :

    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
     
    MyReader = MyCommand.ExecuteReader();
    if (MyReader.HasRows)
    {
           MyReader.Read();
     
           if( MyReader.IsDBNull(0) )
           {
                 CartSum = 0;
           }
           else
           {
                 CartSum = MyReader.GetInt32(0);
           }
    }

  3. #3
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    uraxyd si c ok n'oublie aps le tag

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 89
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par Sphax
    Salut,

    Tu peux faire :

    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
     
    MyReader = MyCommand.ExecuteReader();
    if (MyReader.HasRows)
    {
           MyReader.Read();
     
           if( MyReader.IsDBNull(0) )
           {
                 CartSum = 0;
           }
           else
           {
                 CartSum = MyReader.GetInt32(0);
           }
    }
    ok merci ca marche lorsque CartSum est un int.
    Mais j'ai voulu le modifier en float, en le declarant comme ceci:

    float CartSum=0;
    et j'ai modifié la ligne CartSum = MyReader.GetInt32(0); en
    CartSum = MyReader.GetFloat(0);

    mais ca ne marche pas j'ai une exeption "Specified cast is not valid"

    Voila je ne vois pas ou peut etre mon erreur ???
    merci

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Attention
    Citation Envoyé par MSDN
    Aucune conversion n'est effectuée ; les données extraites doivent par conséquent déjà correspondre à un nombre en virgule flottante simple précision.
    Essayes ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CartSum = (float)MyReader.GetValue(0);

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 89
    Points : 96
    Points
    96
    Par défaut
    j'ai deja essayé mais sans succes ...

    voici le code complet de ma fonction:

    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
        public float ca_total(int ReportId){
          SqlCommand MyCommand;
          SqlDataReader MyReader;
     
          float CartSum=0;
     
          MyCommand = new SqlCommand("SELECT SUM(wc.MontantPanier) FROM webtracking_ca wc INNER JOIN webtracking_stats ws ON wc.IdStats = ws.id WHERE ws.ReportId = @ReportId",MyConnection);
          MyCommand.Parameters.Add(new SqlParameter("@ReportId", SqlDbType.Int, 100));
          MyCommand.Parameters["@ReportId"].Value = ReportId;
     
          MyReader = MyCommand.ExecuteReader();
          if (MyReader.HasRows){
            MyReader.Read();
     
            if (MyReader.IsDBNull(0))
                CartSum = 0;
            else
                CartSum = (float)MyReader.GetFloat(0);
          }
          Response.Write("<br>"+CartSum);
          MyReader.Close();
          return CartSum;
        }

  7. #7
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 296
    Points
    7 296
    Par défaut
    en VB j'ai géré ca par une ptite fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      Private Function getValue(ByRef ligne As DataRow, ByVal champ As String)
        Dim ret As String
        If IsDBNull(ligne.Item(champ)) Then
          ret = ""
        Else
          ret = ligne.Item(champ)
        End If
        Return ret
      End Function
    que j appelle comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monTextbox.Text = getValue(datatableDeLaRequeteSQL.Rows(0), "Libellé")
    la ligne etant bien sur variable , mise a 0 car dans le cas present ca ne doit me renvoyer qu'une ligne.

  8. #8
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 89
    Points : 96
    Points
    96
    Par défaut
    je viens te tester avec getvalue(0) et j'ai toujours l'exeption Specified cast is not valid. (cette fois en jaune, au lieu d'etre en vert ??)

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 89
    Points : 96
    Points
    96
    Par défaut
    Je me demande si mon probleme vient pas du fait que les float en c# s'ecrivent avec un . et en sql server avec une ,

    Si oui commet faire pour que ca marche

  10. #10
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Bon il nous un peu raisonner tout de même
    • 1. eviter les problèmes liés au NonCast d'un DataReader en utilisant plutôt GetValue[list:4b5dcbf483](Obtient la valeur de la colonne spécifiée dans son format natif)
      Ainsi nous sommes sûr de ce que nous recuperons avec cette méthode
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Object mavaleur;
      mavaleur = MyReader.GetValue(0);
      Je te conseille de verifier par un espion la valeur recupéré et son type

    2. Maintenant travaillons sur mavaleur
    [/list:u:4b5dcbf483]
    Je reprends le code test à effectuer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Object mavaleur;
    float CartSum = 0F;
    ...
    ...
    else
     {
       mavaleur = MyReader.GetValue(0);
       CartSum =Convert.ToSingle (mavaleur);
     }
    Cette fois si un souci survient, tu nous donnes
    le type de mavaleur recupéré
    la ligne de code en entier qui lève l'exception
    puis le message d'erreur en entier qui lui correspond
    merci

  11. #11
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 89
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par neguib
    Bon il nous un peu raisonner tout de même
    • 1. eviter les problèmes liés au NonCast d'un DataReader en utilisant plutôt GetValue[list:53f269d0e6](Obtient la valeur de la colonne spécifiée dans son format natif)
      Ainsi nous sommes sûr de ce que nous recuperons avec cette méthode
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Object mavaleur;
      mavaleur = MyReader.GetValue(0);
      Je te conseille de verifier par un espion la valeur recupéré et son type

    2. Maintenant travaillons sur mavaleur
    [/list:u:53f269d0e6]
    Je reprends le code test à effectuer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Object mavaleur;
    float CartSum = 0F;
    ...
    ...
    else
     {
       mavaleur = MyReader.GetValue(0);
       CartSum =Convert.ToSingle (mavaleur);
     }
    Cette fois si un souci survient, tu nous donnes
    le type de mavaleur recupéré
    la ligne de code en entier qui lève l'exception
    puis le message d'erreur en entier qui lui correspond
    merci
    Merci beaucoup ca marche nickel !
    Par contre j'aimerai juste savoir ce que represente le 0F pour l'initialisation de CatSum

  12. #12
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    C'est ainsi que tu dois déclarer un float en C# par la lettre F en plus de la valeur (cf: documentation MSDN )

    Si c'est ok pour toi n'oublies pas le tag

  13. #13
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 89
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par neguib
    C'est ainsi que tu dois déclarer un float en C# par la lettre F en plus de la valeur (cf: documentation MSDN )

    Si c'est ok pour toi n'oublies pas le tag
    Merci bcp neguib !

    enfin c'est quant meme curieux cette notation

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/06/2012, 00h16
  2. [AJAX] mon retour XML est toujours NULL
    Par beegees dans le forum AJAX
    Réponses: 1
    Dernier message: 14/04/2009, 07h22
  3. probleme de requete imbriquée avec resultat null
    Par sdubouis dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/12/2008, 18h26
  4. Retour d'une valeur Null
    Par fragmonster dans le forum Services Web
    Réponses: 6
    Dernier message: 23/11/2007, 22h48
  5. comment remplacer les resultat NULL dans une requete HQL
    Par Rambler dans le forum Hibernate
    Réponses: 1
    Dernier message: 28/08/2007, 16h55

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