none
Dataset GetChanges et Merge RRS feed

  • Question

  • Bonjour,

    J'ai un souci avec les dataset: Je récupére les données d'une table d'une BdD via un dataset. Ma table est très simple pour l'exemple : elle contient une clé primaire auto increment + un champ de type nvarchar.
    CREATE TABLE [dbo].[T_User](
     [Id] [int] IDENTITY(1,1) NOT NULL,
     [Name] [varchar](50) NOT NULL,
     CONSTRAINT [PK_T_User] PRIMARY KEY CLUSTERED
    (
     [Id] ASC
    )

    Ensuite je rajoute une ligne dans ma table et je veux sauvegarder le dataset. Pour cela j'utilise la méthode GetChanges() du dataset pour n'envoyer que les données modifiées (en réalité je passe par un web service). Les données sont bien sauvegardés puis je fais un merge de mon dataset sauvegardé pour appliquer les modifs sur mon dataset original notamment la valeur de la clé primaire. Quand je fais le merge, il me rajoute une ligne dans mon dataset car il n'arrive pas à mapper les 2 lignes ensemble:
    DataSet1 ds = new DataSet1("");
    ds.Fill();

    DataRow row = ds.User.NewRow();
    row["Name"] = "christophe";
    ds.User.Rows.Add(row);

    DataSet1 dsChange = ds.GetChanges() as DataSet1;
    dsChange.Save();
    ds.Merge(dsChange);

    Y a-t-il une autre solution que d'envoyer le dataset d'origine car il peut contenir beaucoup de données qui n'ont pas besoin d'être sauvegardées?

    Merci de vos réponses

    mercredi 23 juin 2010 16:22

Réponses

  • Bonjour,

    La fusion de deux DataSet ne peut se faire que sur les clés primaires. Si vous avez un DataSet contenant des identifiants à -1 et -2 et un autre DataSet contenant des identifiants à 1 et 2, alors la fusion de ces deux DataSet provoquera une DataSet contenant 4 identifiants -1, -2, 1 et 2.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse Alex Petrescu mercredi 30 juin 2010 08:55
    jeudi 24 juin 2010 20:19
    Modérateur

Toutes les réponses

  • Bonjour,

     

    Pouvez-vous expliquer à nouveau le problème avec les deux datasets (sauvegarde vs original) ? Je ne comprends pas la logique de votre scenario.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation

     

     

    Café des usages

     

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    jeudi 24 juin 2010 10:15
  • La logique de mon scénario est la suivante:
    dans la pratique j'attaque des web services pour récupérer/sauvegarder mes données. Pour ne pas surcharger le réseau, je comptais envoyer au web service qui sauvegarde les données le dataset qui contient uniquement les données modifiées/supprimées/ajoutées. Pour faire cela j'utilise la méthode GetChanges(). Par contre une fois mes données sauvegardées, je veux appliquer mes modifications à mon dataset original. Pour les données modifiées/supprimées, un acceptchange sur le dataset original suffit mais pour une table qui contient une clé primaire auto-incrémentée, je voudrais que mon dataset original (qui a pour le moment les valeurs pour cette clé -1,-2...) soit mis à jour avec la vraie valeur de clé primaire générée par ma base de données. Pour cela je voulais faire un merge des 2 datasets mais ce merge n'arrive pas à mapper les 2 lignes ensemble et me rajoute une ligne dans mon dataset original au lieu de mettre à jour la ligne existante.

    Comme chaque DataRow est mappé dans un objet métier, je ne peux pas supprimer la ligne et actuellement j'envoie mon dataset original en sauvegarde et surcharge ainsi le réseau.

    J'epère avoir été plus clair.

    Merci

    jeudi 24 juin 2010 12:11
  • Bonjour,

    La fusion de deux DataSet ne peut se faire que sur les clés primaires. Si vous avez un DataSet contenant des identifiants à -1 et -2 et un autre DataSet contenant des identifiants à 1 et 2, alors la fusion de ces deux DataSet provoquera une DataSet contenant 4 identifiants -1, -2, 1 et 2.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse Alex Petrescu mercredi 30 juin 2010 08:55
    jeudi 24 juin 2010 20:19
    Modérateur
  • Bonjour,

     

    Christophe55, est-ce que la réponse de M. Tourreau vous a été utile ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation, WPF

     

     

    Café des usages

     

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     

    lundi 28 juin 2010 08:54
  • Bonjour,

    Oui la réponse m'a été utile même si je suis un peu déçu du fonctionnement des datasets.

    mardi 6 juillet 2010 09:40