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

Accès aux données Discussion :

[C#] Comment gérer les champs DBNull ?


Sujet :

Accès aux données

  1. #1
    Membre du Club Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Points : 52
    Points
    52
    Par défaut [C#] Comment gérer les champs DBNull ?
    bonjour à tous,

    Mon problème est le suivant: je crée un enregistrement dans ma table client à partir d'un autre enregistrement d'une autre table client qui est légèrement différente au niveau du nombre d'enregistrement. Je travaille avec 2 datasets typés ce qui fais que j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DS_Clients.Client NewClient = dsClient.NewClientRow();
    NewClient.NOM = ClientInterne.NOM;
    NewClient.PRENOM = ClientInterne.PRENOM;
    ...
    Jusque là OK. Là ou le bas blesse c'est que les champs de ClientInterne peuvent etre vide (DBNull). et donc la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NewClient.FK_GROUPE = ClientInterne.FK_GROUPE;
    Pose probleme parce que FK_GROUPE peut valoir DBNull et lui il ne veut pas attribuer DBNull à un champs.

    Je précise que AllowDBNull vaut true dans la DB et dans les datasets.

    Je cherche une solution pour éviter de mettre un if a chaque ligne. Autrement dit qu'il accepte le DBNull ou ne fasse tout simplement pas d'erreur (qu'il passe a la ligne suivante si ca va pas par exemple).

    Merci pour toute aide.

  2. #2
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(ClientInterne.FK_GROUPE==DBnull)
       NewClient.FK_GROUPE = "";
    else
       NewClient.FK_GROUPE = ClientInterne.FK_GROUPE;

  3. #3
    Membre du Club Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Points : 52
    Points
    52
    Par défaut
    merci mais c'est justement ce que je voulais éviter.
    Si tu dois faire ca pour tous les champs de toutes tes tables ce doit être super lourd.
    De plus je souhaiterais que si ClientInterne.FK_GROUPE est DBNull l'autre le soit également car c'est un état qui a son utilité.

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Sauf si tu transformes le code de zeavan en sous-routine commune
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private object Getvalue(object value)
    {
       if(value== DBNull.Value)
         return string.empty;
       else
         return value;
    }
    Ce qui donnera ensuite par exemple une boucle foreach sur chaque champs de ma table à importer je fournis sa valeur adaptée pour le champs equivalent de ma nouvelle table
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre du Club Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Points : 52
    Points
    52
    Par défaut
    le soucis c que j'ai besoin du DBNull. Une chaine vide ce n'est pas pareil.

    fin merci quand meme...

    je pense qu'il y a pas vraiment de soluce a part le if

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Et bien, etant donné que la méthode de neguib renvoit un object, tu dois pouvoir faire:

    private object Getvalue(object value)
    {
    if(value== DBNull.Value)
    return DBNull.Value;
    else
    return value;
    }
    A tester

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Morpheus
    Et bien, etant donné que la méthode de neguib renvoit un object, tu dois pouvoir faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private object Getvalue(object value)
    {
      if(value== DBNull.Value)
        return DBNull.Value;
      else
        return value;
    }
    A tester
    je lui aurais proposé s'il n'y avait pas eu
    Citation Envoyé par FraktaL
    ...Pose probleme parce que FK_GROUPE peut valoir DBNull et lui il ne veut pas attribuer DBNull à un champs...
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

Discussions similaires

  1. Réponses: 8
    Dernier message: 21/08/2007, 17h07
  2. Comment remplir les champs d'une autre application ?
    Par rico32fr dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/06/2006, 08h54
  3. [DREAMWEAVER 8] Comment tester les champs d'un formulaire
    Par steeves5 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 05/02/2006, 21h43
  4. Réponses: 3
    Dernier message: 14/03/2005, 19h02
  5. Comment voir les champs créés dans les tables?
    Par Missvan dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/02/2004, 10h27

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