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 :

Impossible d'effectuer un cast d'un objet de type "system.DBNull" [Débutant]


Sujet :

C#

  1. #1
    Membre averti Avatar de solaar
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 607
    Points : 314
    Points
    314
    Par défaut Impossible d'effectuer un cast d'un objet de type "system.DBNull"
    Bonjour,
    j'ai une erreur dans mon datagrid;
    impossible d'effectuer un cast d'un objet de type "system.DBNull" en type "system.string".....
    je vous présente mon code :
    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
     
           //Infos Fournisseurs ou Prestataires
                    var listInfosCheque = tab_ChequeTableAdapter.GetDataByTousChequesPrestFourn(clVariableGlobale._codeSocieteActif, clVariableGlobale._codeEtablissementActif);
                    foreach(var infos in listInfosCheque)
                    {
                        if (tbNumeroCheq.Text == infos.Numero_Cheque.ToString())
                        {
     
                            //infos Fournisseur                    
                            if (Convert.IsDBNull(infos.Code_Fournisseur))
                            {
                                Tab_Cheque _cheq = new Tab_Cheque();
                                {
                                    _cheq.Code_Fournisseur = "";                         
                                }                          
                                db.SaveChanges();                            
                            }                  
     
                                tbNom.Text = clMethodes.GetInfosNomFour(db, infos.Code_Fournisseur);
                                if (infos.NumPrestataire != 0)
                                {
                                    //Infos Prestataire
                                    string[] tableau = clMethodes.GetInfosNomPrenomPrest(db, infos.NumPrestataire);
                                    tbNom.Text = tableau[0].ToString();
                                    tbPrenom.Text = tableau[1].ToString();
                                }         
                        }
     
                    }
    cordialement
    solaar

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 116
    Points : 158
    Points
    158
    Par défaut
    Bonjour,

    je suppose que c'est sur ce bout de code le bug :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (Convert.IsDBNull(infos.Code_Fournisseur))
                            {
                                Tab_Cheque _cheq = new Tab_Cheque();
                                {
                                    _cheq.Code_Fournisseur = "";                         
                                }                          
                                db.SaveChanges();                            
                            }
    Qu’essaye tu de faire ici? De vérifier si code_fournisseur à une valeur?

    Si c'est ça tu peux faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (string.IsNullOrEmpty(infos.Code_Fournisseur))
                            {
                                Tab_Cheque _cheq = new Tab_Cheque();
                                {
                                    _cheq.Code_Fournisseur = "";                         
                                }                          
                                db.SaveChanges();                            
                            }

    Sans plus de détails, je ne pourrais pas t'aider plus.

    Cordialement.

  3. #3
    Membre averti Avatar de solaar
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 607
    Points : 314
    Points
    314
    Par défaut
    Non rien n'a changé !
    Aussi je rappel que Null est différent de DBNull.

  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 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Tu peux essayer avec :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    if(infos.Code_Fournisseur == DBNull.Value)
    Mais c'est quand même bizarre d'avoir à faire ça, il y a peut-être un souci de conception du côté de ta couche d'accès aux données. On s'attendrait plutôt à tomber sur une propriété de type int ou string par exemple, pas sur un type DBNull.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    en lisant cette aide, j'ai l'impression que DBNull n'est pas une valeur utilisable mais un outille de test.

    J'utiliserais quelque chose dans le genre pour convertir la valeur en string.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DBNull.Value.Equals(infos.Code_Fournisseur) ? "": infos.Code_Fournisseur.ToString();

  6. #6
    Membre averti Avatar de solaar
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 607
    Points : 314
    Points
    314
    Par défaut
    Je vous montre une image de l'erreur a chaque click sur la ligne de la cellule.
    Images attachées Images attachées  

  7. #7
    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 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Quelle est la ligne de code à l'origine de cette erreur ?

  8. #8
    Membre averti Avatar de solaar
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 607
    Points : 314
    Points
    314
    Par défaut
    Voisi mon code :
    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
     
     //Infos Fournisseurs ou Prestataires
                    var listInfosCheque = tab_ChequeTableAdapter.GetDataByTousChequesPrestFourn(clVariableGlobale._codeSocieteActif, clVariableGlobale._codeEtablissementActif);
                    foreach(var infos in listInfosCheque)
                    {
                        if (tbNumeroCheq.Text == infos.Numero_Cheque.ToString())
                        {
     
                            //infos Fournisseur                    
     
                            //if (DBNull.Value.Equals(infos.Code_Fournisseur))
                            //{
                            //    Tab_Cheque _cheq = new Tab_Cheque();
                            //    {
                            //        _cheq.Code_Fournisseur = "";                         
                            //    }                          
                            //    db.SaveChanges();                            
                            //}                  
     
                                tbNom.Text = clMethodes.GetInfosNomFour(db, infos.Code_Fournisseur);
                                if (infos.NumPrestataire != 0)
                                {
                                    //Infos Prestataire
                                    string[] tableau = clMethodes.GetInfosNomPrenomPrest(db, infos.NumPrestataire);
                                    tbNom.Text = tableau[0].ToString();
                                    tbPrenom.Text = tableau[1].ToString();
                                }         
                        }
     
                    }
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erreur : " + ex.Message);
     
                }
            }
    if (tbNumeroCheq.Text == infos.Numero_Cheque.ToString())

    j'ai l'erreur qui s'affiche.... exception levée:

  9. #9
    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 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Ok merci pour ces précisions

    Est-ce que tu peux nous donner le type de la propriété Numero_Cheque ?

  10. #10
    Membre averti Avatar de solaar
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 607
    Points : 314
    Points
    314
    Par défaut
    le type de la propriété Numero_Cheque est int. Mais je pense pas que sa soit lui ..... dans ma base de donnée infos.Code_Fournisseur a des valeurs NULL

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 116
    Points : 158
    Points
    158
    Par défaut
    Et est ce que cette propriété est Nullable(int?)?

  12. #12
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut
    essaye cela au cas où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( tbNumeroCheq.Text == Convert.ToString(infos.Numero_Cheque) )

  13. #13
    Membre averti Avatar de solaar
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 607
    Points : 314
    Points
    314
    Par défaut
    Merci a tout le mon monde mon problème était une de mes fonctions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           tbNom.Text = clMethodes.GetInfosNomFour(db, infos.Code_Fournisseur);
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      public static  string GetInfosNomFour(TraiteDBEntities _db, string _codeFour)
            {  
                Tab_Fournisseur _fournisseur = (from p in _db.Tab_Fournisseur where p.Code_Fournisseur == _codeFour select p).FirstOrDefault();
                return _fournisseur.Nom_Fournisseur;
            }
    lorsque _codeFour=null il gère automatiquement une erreur.
    j'ai supprimer la fonction qui ne me servait a rien de toutes les façon.


    Cordialement
    solaar

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/09/2014, 22h12
  2. Réponses: 4
    Dernier message: 10/05/2011, 11h55
  3. Réponses: 7
    Dernier message: 26/04/2011, 18h00
  4. Réponses: 0
    Dernier message: 13/03/2010, 10h25
  5. Réponses: 2
    Dernier message: 06/03/2007, 19h38

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