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

VB.NET Discussion :

Problème avec la conversion de DbNull


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème avec la conversion de DbNull
    Bonjour ,
    J'utilise un langage Visual Basic 2010 dont je suis tout débutant . J'aimerais bien vouloir connaître le problème de mon code énoncé ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Dim s As Double
            Dim r As Double
            Dim m As Double
            Dim avg As Double
            s = 0
     
            cnx.Open()
            cmd.Connection = cnx
     
            cmd.CommandText = "select  SUM(Entree*Entree)  from statistique"
            s = cmd.ExecuteScalar()
    En fait ça me génére cette erreur au niveau de la commandtext : conversion from dbnull to double is not valid
    J'ai besoin de votre précieux aide pour trouver la solution , merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 218
    Points : 493
    Points
    493
    Par défaut
    Bonjour

    Deux problème :

    - ExecuteScalar renvoie un object, donc tu dois caster en "double" le retour.

    - Ici la table est vide visiblement, donc SUM retourne null.

    Donc stocker le résultat de ExecuteScalar dans un objet, tester si la valeur est DBNull et si ce n'est pas le cas, caster vers le double.
    Beaucoup trop d'hommes viennent au monde : l'Etat a été inventé pour ceux qui sont superflus. (Friedrich Nietzsche)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour François.M et merci pour votre réponse
    Je crois comprendre votre solution mais SVP pouvez-vous m'expliquer comment caster en double apres avoir testé la condition Dbnull ? c'est le mot "cast" qui me paraît incompréhensible .
    Merci encore une fois .

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 218
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par santic19 Voir le message
    Bonjour François.M et merci pour votre réponse
    Je crois comprendre votre solution mais SVP pouvez-vous m'expliquer comment caster en double apres avoir testé la condition Dbnull ? c'est le mot "cast" qui me paraît incompréhensible .
    Merci encore une fois .
    Je ne connais pas Visual Basic, mais il me semble qu'il faut utiliser la fonction CType.
    Beaucoup trop d'hommes viennent au monde : l'Etat a été inventé pour ceux qui sont superflus. (Friedrich Nietzsche)

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 1
    Points : 0
    Points
    0
    Par défaut
    La requete select sum ne fonctionne pas si le champ a été declaré caratére ou chaine de caractére ou date etc dans la base de donnée
    solution de votre probleme
    Code VB.NET : 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
    // cn c'est le nom de votre string de connexion 
    // dr une variable de type SqlDataReader
     
     
    cn.open
    cmd.commandText="select nom_champ1, nom_champ2 from nom_table"
    cmd.connexion =cn
    cmd.executeReader()
    while dr.read
      if isDbNull(dr(0)) or  isDbNull(dr(1)) then
          Somme =somme + 0
       else 
          Somme =some + dr(0)* dr(1)
    end if
    end while
    cn.close

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 218
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par My Family Voir le message
    La requete select sum ne fonctionne pas si le champ a été declaré caratére ou chaine de caractére ou date etc dans la base de donnée
    Ben, c'est logique non.
    Mais comme il n'a pas posté de DDL de la table, on n'a pas de raison de penser a priori que le schéma est aberrant.

    Donc votre solution ne rime pas à grand chose (d'autant que même si la table était mal fichue, il serait dans ce cas préférable de faire un SUM(CAST( Col1 AS INT) * CAST(COl2 as INT)) directement dans la requête SQL).
    Beaucoup trop d'hommes viennent au monde : l'Etat a été inventé pour ceux qui sont superflus. (Friedrich Nietzsche)

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cmd.CommandText = "select  SUM(Entree*Entree)  from statistique"
    dim resultat = cmd.ExecuteScalar()
    if resultat is system.dbnull.Value then
      msgbox ("la requete retourne null, null n'est pas un nombre donc pas un double")
      exit sub
    end if
    s = cdbl(resultat)
    au passage, les types single et double sont réservés pour des calculs scientifiques car ils sont peu précis (ca convient peut etre dans ton cas quand même)
    pour des nombres décimaux sans perte lors de calculs il faut utiliser le type Decimal et donc cdec( valeur à transformer) pour transformer en décimal
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/03/2015, 14h22
  2. Problème avec la conversion en hexadécimal
    Par sanzero dans le forum C
    Réponses: 2
    Dernier message: 10/06/2011, 16h00
  3. Problème avec la conversion du DateTime
    Par Dr.SoFtNaF dans le forum Développement
    Réponses: 7
    Dernier message: 15/09/2010, 11h24
  4. Réponses: 3
    Dernier message: 28/12/2006, 15h06
  5. (Problème avec...) conversion de std::string en char
    Par crossbowman dans le forum SL & STL
    Réponses: 7
    Dernier message: 05/03/2006, 19h54

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