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

Dotnet Discussion :

Difference entre deux DataSets


Sujet :

Dotnet

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 42
    Points
    42
    Par défaut Difference entre deux DataSets
    Je cherche un moyen de récupérer un delta entre deux datasets.
    Ces deux datasets sont les résultats de la même requête sql, a 5 minutes d'intervalles.
    Elles ont donc les mêmes schéma.
    Par convention, la colonne "PK" contient un identifiant unique qui ne change pas entre les requêtes.

    Voici le raisonnement que je tiens a l'heure actuelle :
    Chargement du dataset 1
    Création de la PK sur le dataset
    Chargement du dataset 2
    Création de la PK sur le dataset
    AcceptChanges() sur chacun des datasets

    dataset1.Merge(dataset2);
    dataset1.getChanges();

    Cette dernière instruction me renvoie toujours null, et je ne saisis toujours pas pourquoi.
    Mon jeu de donnée contient exactement les mêmes données (soit 36 lignes), exceptée l'une des valeurs d'une ligne, qui passe de "255" à "100".


    Voici le code utilisé :
    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
     
    public DataSet dataset1, dataset2, datasetdiff;
    public string datasetpath1 = @"D:\testwriter\aDS2.xml", datasetpath2 = @"D:\testwriter\aDS3.xml";
    dataset1 = new DataSet();
    dataset2 = new DataSet();
     
    dataset1.ReadXml(datasetpath1);
    // Par convention, la colonne "PK" est la clef.
    foreach (DataTable table in dataset1.Tables)
        table.PrimaryKey = new DataColumn[] { table.Columns["PK"] };
    dataset1.AcceptChanges();
     
     
    dataset2.ReadXml(datasetpath2);
    // Par convention, la colonne "PK" est la clef.
    foreach (DataTable table in dataset2.Tables)
        table.PrimaryKey = new DataColumn[] { table.Columns["PK"] };
    dataset2.AcceptChanges();
     
    dataset1.Merge(dataset2);
    datasetdiff = dataset1.GetChanges();
    datasetdiff est toujours null.
    Quelqu'un aurait-il une idée ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Essaie avec dataset1.Merge(dataset2, true)
    Pas sûr que ça change quoi que ce soit, mais ça coute pas cher d'essayer...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2002
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 104
    Points : 128
    Points
    128
    Par défaut
    Je me permets d'émettre un doute quant à l'utilisation conjointe de la méthode Merge (fusion pour la mise à jour) pour rechercher les différences entre 2 versions d'un DataSet ; et l'utilisation de la méthode GetChanges qui permet de récupérer les modifications du DataSet : RowState != Unchanged et/ou changement de schéma (ce qui n'est pas le cas ici).
    Pourquoi penser que la méthode Merge va modifier les RowState ... ça ne serait pas logique
    Surtout que ces états sont souvent utilisés par la suite par un "adapter" (en général) pour exécuter des requêtes de mise à jour avec la BDD.

    L'exemple suivant propose d'utiliser l'event RowChanged : http://msdn.microsoft.com/fr-fr/libr...ble.merge.aspx

    A tester ...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par cboun94 Voir le message
    Pourquoi penser que la méthode Merge va modifier les RowState ... ça ne serait pas logique
    J'en suis pas si sûr... a priori les rows importés par le Merge auront le RowState "Added", de façon à ce qu'un adapteur puisse les insérer dans la BDD. Mais bon, j'ai jamais testé, il faudrait vérifier.

Discussions similaires

  1. Différence entre deux listes
    Par Celelibi dans le forum Linux
    Réponses: 4
    Dernier message: 26/04/2006, 09h46
  2. Réponses: 7
    Dernier message: 03/02/2006, 13h50
  3. [EXCEL] difference entre deux fichiers
    Par Mokhtar BEN MESSAOUD dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/01/2006, 11h12
  4. [PIL] Difference entre deux images
    Par t_om84 dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 26/12/2005, 12h45
  5. difference entre deux requetes
    Par rdams dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/12/2005, 09h38

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