Holen Sie sich die Unterschiede in den 2 Datensätze c#
Schreibe ich einen kurzen Algorithmus hat zu vergleichen die beiden Datensätze, so dass die Unterschiede zwischen den beiden weiter verarbeitet werden können.
Ich tryed erreichen dieses Ziel durch die Zusammenlegung dieser beiden Datensätze und erhalten die daraus resultierenden Veränderungen in ein neues DataSet.
Meine Methode sieht wie folgt aus:
private DataSet ComputateDiff(DataSet newVersion, DataSet oldVersion)
{
DataSet diff = null;
oldVersion.Merge(newVersion);
bool foundChanges = oldVersion.HasChanges();
if (foundChanges)
{
diff = oldVersion.GetChanges();
}
return diff;
}
Ergebnis foundChanges ist immer false, auch wenn die beiden Datensätze unterschiedliche Werte.
Beide Datensätze haben die gleiche strukture. Sie bestehen aus drei DataTables, die das Ergebnis von drei Abfragen in einer Datenbank.
Das Zusammenführen funktioniert gut, keine Probleme.
Meine Frage ist:
Gibt es irgendeine vernünftige Erklärung, warum die foundChanges variable ist immer falsch und wenn nicht, würde Linq eine geeignete Lösung für dieses problem oder muss ich, um zu bestimmen, die Veränderungen, die durch Durchlaufen der Datensätze
Hier sind einige weitere Informationen:
Die Programmiersprache ist C#
Ich bin mit .Net framework 4.0
Ich entwickle auf einem Windows 8-Computer
Die beschriebenen Daten stammen aus einer Datenbank(MSSQL-Server 2012 express)
Meine DataSets oder DataTables haben keine PK ' s, soweit ich weiß.
Vielen Dank im Voraus
- In der Regel, was Sie tun würde, ist, nehmen Sie ein dataset oldVersion und ändern Sie es. Dann oldVersion enthält alle von den neuen änderungen. Sie könnte dann rufen DataSet-diff = oldVersion.GetChanges().
- Sie können das nützlich finden: stackoverflow.com/a/7518025/211627
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das problem ist, dass Sie nicht verstehen .NET-DataSets. Eine DataTable bleibt der "original" - Kopie von jeder geladene Wert in es. Wenn ein Wert geändert wird, wird die DataTable in der Lage ist zu erkennen, das zu ändern. Ebenso die DataTable hält verfolgen der Zeilen, die Hinzugefügt oder gelöscht wurden. Die
HasChanges()
Funktion einfach kriecht durch die DataTables und prüft, um zu sehen, ob es irgendwelche änderungen (geänderte Wert, neue Zeilen, gelöschte Zeilen, etc.)Finden Sie in der MSDN-Dokumentation:
http://msdn.microsoft.com/en-us/library/system.data.dataset.haschanges.aspx
Vergleich der beiden Datensätze ist schwierig, und ich bin mir nicht bewusst irgendeine eingebaute Funktion, um diese zu bewältigen (da jeder Programmierer Ihre eigene definition der "äquivalenz").
Finden Sie unter:
Den code unten vergleicht zwei DataTables Suche für hinzugefügte/gelöschte Zeilen basierend auf einem Schlüssel-Spalte und geänderten Zeilen durch vergleichen der Werte der übereinstimmenden Zeilen (wieder, basierend auf dem Schlüssel). Es wäre ziemlich trivial, zu erweitern, zu vergleichen, Datensätze (durch den Vergleich von ähnlich benannten Tabellen zwischen DataSets).
Ausgabe der Konsole:
Wenn das schema der beiden Datensätze gleich sind, dann können Sie versuchen, unter einem
Wenn das schema der beiden Datensätze unterschiedlich sind, dann müssen Sie manuell tun.
Wie Sie sehen können, von einigen der anderen Antworten ist es nicht einfach, die Differenz der zwei Datensätze.
Das ist der Zweck des DataSet.GetChanges(). Wenn Sie beginnen mit einem Datensatz und die änderungen direkt auf das dataset (d.h. wenn ein Benutzer aktualisiert eine Zelle, wenn ein Benutzer ein Formular abschickt, etc...), dann wird der DataSet-änderungen verfolgt. Auf diese Weise können Sie call-DataSet.GetChanges (), um die Veränderungen (oder Unterschied). Sie kann dann nur die änderungen.
Ist es ein schwieriges problem zu nehmen, eine erste dataset und eine endgültige dataset und die Unterschiede angezeigt bekommen. Auch die Zusammenlegung der Letzte Datensatz mit dem alten Datensatz nicht sinnvoll, da der Letzte Datensatz ist das Ergebnis der Zusammenführung.