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

Windows Forms Discussion :

Comment Ajouter une valeur nulle a une table d'un dataset?


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Février 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 48
    Points : 38
    Points
    38
    Par défaut Comment Ajouter une valeur nulle a une table d'un dataset?
    salut a vous tous!

    j'ai creé un dataset fortement typé en suivant les etapes de super tutoriel de J-M Rabilloud.

    Mai j'ai rencontré le probleme suivant:

    j'ai un table fonctionnaires qui possède les caracteristiques suivantes;
    fonctionnaires(#num_fonctionnaire,nom,prenom,adresse,telephone,num_chef)
    avec num_chef (short) peut etre Null, et num_fonctionnaire est auto incrémenté.

    Alors je vaudrais savoir comment je peux faire pour ajouter un nouveau fonctionnaire avec num_chef sera null?

    par exemple pour ajouter un nouveau fonctionnaire avec num_chef = 5. je tape :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.dataset1.fonctionnaires.AddfonctionnairesRow(nom.Text, prenom.Text, adresse.Text, telephone.Text, 5)
    Mais pour num_chef = Null, Comment faire?

  2. #2
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    je suppose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.dataset1.fonctionnaires.AddfonctionnairesRow(nom.Text, prenom.Text, adresse.Text, telephone.Text, DBNull.Value)

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Comme ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int? chef; // definir ichef comme int "nullable"
    chef=5   ; // cas 1 : ichef défini
    chef=null; // cas 2 : ichef non spécifié
    Me.dataset1.fonctionnaires.AddfonctionnairesRow
      (nom.Text, prenom.Text,adresse.Text, telephone.Text,chef );

  4. #4
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Février 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 48
    Points : 38
    Points
    38
    Par défaut
    Merci bidou et Grafitto pour vos réponse!
    Citation Envoyé par bidou Voir le message
    je suppose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.dataset1.fonctionnaires.AddfonctionnairesRow(nom.Text, prenom.Text, adresse.Text, telephone.Text, DBNull.Value)
    c'est ça ce que j'ai essayé au debut, mes j'aurais toujours le message suivant :

    une valeur de type 'DBnull' ne peut pas etre convertie en 'Short'.

    Citation Envoyé par Graffito Voir le message
    Comme ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int? chef; // definir ichef comme int "nullable"
    chef=5   ; // cas 1 : ichef défini
    chef=null; // cas 2 : ichef non spécifié
    Me.dataset1.fonctionnaires.AddfonctionnairesRow
      (nom.Text, prenom.Text,adresse.Text, telephone.Text,chef );
    Je crois que c'est la bonne solution, mais ce code et en C#, et moi je suis sous VB.Net.
    pouvez vous m'indiquez comment je declare une variable nullable en VB.Net?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 115
    Points : 110
    Points
    110
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.dataset1.fonctionnaires.AddfonctionnairesRow(nom.Text, prenom.Text, adresse.Text, telephone.Text, Nothing)
    Non ?

  6. #6
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Février 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 48
    Points : 38
    Points
    38
    Par défaut
    WAWW!

    Merci bien Tusbar! ça marche avec Nothing!

    Mais lorsque j'ai tenté de faire un Update pour mon dataset j'ai eu l'erreur suivant que j'ai récupere par un catch de type System.Data.Sqlclient.SqlException



    que dois je faire maintenant?

    et Merci d'avance!

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 115
    Points : 110
    Points
    110
    Par défaut
    Salut, je ne m'y connais pas trop en db, mais tu peux montrer le code de ta requête d'update ?

  8. #8
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Février 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 48
    Points : 38
    Points
    38
    Par défaut
    merci!

    pour l'update de dataset, je l'ai fait par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.dafonctionnaires.update(Me.dataset)
    avec dafonctionnaires un data adapter que j'ai crée en visuel, c'est a dire que j'ai pas touché son code!

  9. #9
    Membre régulier Avatar de stdebordeau
    Homme Profil pro
    Statisticien
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Points : 120
    Points
    120
    Par défaut
    salut à tous. je me permet de relancer ce post (qui n'a pas été conclu) parce que j'ai le même problème. alors si quelqu'un à la solution ...help.

  10. #10
    Membre régulier Avatar de stdebordeau
    Homme Profil pro
    Statisticien
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Points : 120
    Points
    120
    Par défaut
    Bon j'ai fini par trouver la solution.

    en fait, la génération automatique du dataset typé a déjà tout fait.
    de la même manière que sur une ligne on accède au cellule par des propriétés (colonne), on peut aussi accéder à des méthodes qui annule la valeur des cellules. exemple pour avoir la valeur d'une cellule (ligne i, colonne macolonne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataset.matable.matableRow(i).macolonne
    maintenant pour annuler la valeur on a la methode SetmacolonneNull (généré automatiquement, aider vous de l'intellisense)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataset.matable.matableRow(i).SetmacolonneNull
    intéressant ce dataset typé, n'est ce pas ?

  11. #11
    Membre régulier Avatar de stdebordeau
    Homme Profil pro
    Statisticien
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Points : 120
    Points
    120
    Par défaut
    Encore un problème de valeur nulle sur dataset fortement typé. il y'a tout de même peu de littérature sur le sujet.

    Ma réponse précédente apportait une solution à comment passer une valeur nulle. Mais là, mon problème est encore plus corsé:

    j'effectue une requête linq sur une des tables de mon dataset (fortement typé bien sur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim rq = From element as GesBourseDataset.TransacViewRow In GesBourseDataset.TransacView() _
    Where Trim(element.StatuTrsc) = "En Attente" _
    Select element.NomClt, element.CodeClt, element.CodeCpteClt, element.CodeTrsc, element.NomTitre, element.TypeTitre, element.TypeTrsc, element.StatuTrsc, element.DateTrsc, Score = DateDiff(DateInterval.Day, Now, element.DateTrsc) Order By Score Descending
    For Each lgn In rq.ToList
    GesBourseDataset.AttenteT.AddAttenteTRow(lgn.NomClt, lgn.CodeClt, lgn.CodeCpteClt, lgn.CodeTrsc, lgn.NomTitre, lgn.DateTrsc, lgn.TypeTrsc, lgn.StatuTrsc, lgn.Score)
    Next
    à l'exécution du For each, avant même d'en arriver à l'ajout des lignes, il me renvoie l'erreur nullexception comme quoi ma colonne "TypeTrsc" aurait des valeurs DbNull. ce qui du reste est vrai, mais ne doit pas constituer un problème.

    une idée ?
    je serai très heureux d'accéder à des cours, tuto ou autres qui me permettraient enfin de maitriser la bête (dataset typé)

  12. #12
    Membre régulier Avatar de stdebordeau
    Homme Profil pro
    Statisticien
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Points : 120
    Points
    120
    Par défaut
    Bon j'ai fini par trouver après une journée d'acharnement
    pour ceux que ça intéresse, voici le code équivalent qui marche.


    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
     
    Dim rq = From element In GesBourseDataset.TransacView.AsEnumerable _
    Where (element.StatuTrsc = "En attente") _
    Select NomClt = If(element.IsNomCltNull, Nothing, element.NomClt), element.CodeClt, element.CodeCpteClt, element.CodeTrsc, element.NomTitre, TypeTrsc = If(element.IsTypeTrscNull, Nothing, element.TypeTrsc), StatuTrsc = If(element.IsStatuTrscNull, Nothing, element.StatuTrsc), DateTrsc = If(element.IsDateTrscNull, Nothing, element.DateTrsc), Score = DateDiff(DateInterval.Day, Now, If(element.IsDateTrscNull, Now, element.DateTrsc)) Order By Score Descending
    Dim rwa As GesBourse.GesBourseDataSet.AttenteTRow
    For Each lgn In rq
    rwa = GesBourseDataset.AttenteT.NewAttenteTRow
    rwa.CodeClt = lgn.CodeClt
    If lgn.NomClt = Nothing Then
    rwa.SetNomCltNull()
    Else
    rwa.NomClt = lgn.NomClt
    End If
    rwa.CodeCpteClt = lgn.CodeCpteClt
    rwa.CodeTrsc = lgn.CodeTrsc
    rwa.NomTitre = lgn.NomTitre
    If lgn.TypeTrsc = Nothing Then
    rwa.SetTypeTrscNull()
    Else
    rwa.TypeTrsc = lgn.TypeTrsc
    End If
    If lgn.StatuTrsc = Nothing Then
    rwa.SetStatuTrscNull()
    Else
    rwa.StatuTrsc = lgn.StatuTrsc
    End If
    If lgn.DateTrsc = Nothing Then
    rwa.SetDateTrscNull()
    Else
    rwa.DateTrsc = lgn.DateTrsc
    End If
    rwa.ScoreT1 = lgn.Score
    GesBourseDataset.AttenteT.AddAttenteTRow(rwa)
    End If
    Next

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

Discussions similaires

  1. [Elementum] Insertion de valeurs nulles dans une colonne numérique d'un table
    Par cquilgars dans le forum Autres outils décisionnels
    Réponses: 2
    Dernier message: 17/07/2012, 11h50
  2. comment remplir les valeurs nulles d'une colonne par des zeros '0'
    Par sinoun dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 21/09/2011, 16h38
  3. Réponses: 2
    Dernier message: 26/01/2009, 15h38
  4. Comment gérer les valeur Nulles dans une requête ?
    Par sondo dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h02
  5. Affcecter une valeur NULL dans une requete paramétrée
    Par thiouwz2 dans le forum Bases de données
    Réponses: 7
    Dernier message: 05/11/2004, 15h02

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