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 :

Update d'un DataAdapter avec un dataset de 3 datables


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 47
    Par défaut Update d'un DataAdapter avec un dataset de 3 datables
    Bonjour,

    Je viens ici pour demander un coup de main sur un problème qui me turlupine depuis bientôt 2 semaines ... Êtant plutôt spécialisé au développement web, je n'ai pas l'habitude d'utiliser le C#, mais je pense que ce problème reste assez complexe et est au dessus d'un problème de débutant.

    Pour faire simple, je développe une application dont un des écrans contient 3 DGV. Ces DGV sont là pour afficher et permettre une modification / suppression d'informations. Pour faire simple, le 1er DGV présente les éléments "Père", et lorsqu'on en sélectionne un les deux autres DGV sont ré-actualisés pour afficher les deux enfants du père concerné.
    Je n'ai aucun problème dans cette gestion des 3 DGVs, j'ai d'abord voulu gérer ça grâce à un databinding, mais étant en manque de temps j'ai finalement tout fait moi même
    Mon problème est dans l'enregistrement des modifications effectuées dans un ou plusieurs des DGV. Pour expliquer un peut tout ça, j'avais rédigé un pdf pour l'envoyer à mon prof qui ne m'a pas répondu, et le temps passe, mais je pense que je peux vous mettre globalement la même explication, qui est claire je trouve. N'hésitez pas à demander des précisions si besoin !

    Problème :
    Comment faire un update d'un dataAdapter avec un dataSet contenant 3 tables ( ou faire 3 updates avec 3 DataTables ).

    Dans mon code, j'ai créé une petite fonction à laquelle je passe en paramètre des requêtes, et celle-ci va actualiser chacun des DGVs avec la requête fournie.
    Pour se faire, la fonction procède en 3 étapes : elle déclare un DataSet, dans lequel seront stockés les 3 data tables. Elle déclare également le DataAdapter dans lequel seront stockées les données :


    La fonction ajoute ensuite la data table au data adapter et au data set :


    Et enfin, on rempli le DGV :


    Le problème réside dans l'enregistrement de modifications. Celle-ci intervient lorsqu'on veut quitter la fenêtre, et utilise DataS.HasChanges() pour détecter s'il y a eu ou non des modifications. Si c'est le cas, il faut enregistrer ces modifications dans la BDD.
    Le problème, c'est que cela fonctionne pour un seul des trois DGV, celui en bas à gauche traitant des frais forfaitaires, soit la dernière data table crée dans le code ( peut être le problème ? )
    Pour mettre à jour, j'utilise ce code :


    Plusieurs choses, en essayant un update sur la data table 3, tout va bien. En essayant un update sur la datable, pas de message d'erreur mais pas d'enregistrement de modif, et enfin en essayant sur la table2, j'ai un message d'erreur me parlant d'une colonne qui n'est même pas sensée concerner la table.
    Comment puis-je palier à ce problème ?

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonsoir,

    vous devriez vérifier les valeurs des propriétés de l'objet DataAdapter que vous utilisez pour mettre à jour vos données en mode pas à pas.

    En vb.net, il existe la propriété TableMappings qui contient les tables mappées du DataAdapter, je présume qu'il doit exister la même en C#.

    D'après l'erreur que vous annoncez, on dirait qu'il vise une table différente que celle escomptée.

    EDIT: Vous pouvez aussi faire un update de tout le dataset, ça vous évite de passer en revue vos 3 DataTables

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 47
    Par défaut
    Merci pour votre réponse, je ne connaissais pas TableMapping et je vais l'essayer ce soir pour voir ce qu'il en est

    Par contre pour l'update avec le dataset, c'est la première chose que j'ai fait mais ça buguait tout autant. Si je montre l'exemple en prenant datatable par datatable, c'est pour montrer l’étrangeté du problème : l'update fonctionne avec une mais pas avec les autres

  4. #4
    Expert confirmé 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
    Par défaut
    Il me semble qu'un DataAdapter n'a qu'un seul jeu de Select/Insert/Update/DeleteCommand. Le CommandBuilder se base donc sur la SelectCommand courante (celle de la table3) pour définir les mises à jour à effectuer. Ainsi le 2ème Update opérera avec la même commande que le premier et il ne se passerra rien.

    On devrait éviter ce problème en créant un DataAdapter par table.

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Graffito >> Vilain, tu lui as donné la réponse

    On devrait éviter ce problème en créant un DataAdapter par table.
    C'est une solution.

    Une autre solution est d'utiliser un DataSet fortement typé. Personnellement, j'en abuse, c'est tellement plus simple de retrouver ses objets et méthodes

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 47
    Par défaut
    Merci pour vos réponses ! Je ne savais pas pour les dataadapters mais je retiens l'info
    J'ai presque réparé mon bug mais je pense gérer le reste.


    Par contre pour le dataset typé je n'ai pas trop compris : en gros je peux dans l'outil créer l'objet en insérant X tables dans celui-ci ? mais comment je peux ensuite utiliser ça ? Pour passer mes requètes surtout ?

Discussions similaires

  1. [Débutant] Problème avec un DataAdapter et un DataSet
    Par BleuTrèsFoncé dans le forum Accès aux données
    Réponses: 2
    Dernier message: 08/03/2013, 08h26
  2. Réponses: 6
    Dernier message: 18/06/2006, 00h22
  3. Réponses: 7
    Dernier message: 26/07/2005, 16h41
  4. Réponses: 3
    Dernier message: 21/06/2005, 10h23
  5. UPDATE d'une table avec test d'un champ d'une autre table
    Par delphim dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2004, 12h30

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