erhalten die Unterschiede in 2 DataSets c #

9

Ich schreibe einen kurzen Algorithmus, der zwei DataSets vergleichen muss, damit die Unterschiede zwischen beiden weiter verarbeitet werden können. Ich versuchte dieses Ziel zu erreichen, indem ich diese beiden DataSets zusammenfasste und die resultierenden Änderungen in ein neues DataSet umwandelte.

Meine Methode sieht so aus:

%Vor%

Das Ergebnis von foundChanges ist immer falsch, obwohl die beiden DataSets unterschiedliche Werte enthalten. Beide DataSets haben die gleiche Struktur. Sie bestehen aus drei DataTables, die das Ergebnis von drei Querys in einer Datenbank sind. Die Zusammenführung funktioniert gut, keine Probleme damit.

Meine Frage ist: Gibt es eine vernünftige Erklärung dafür, dass die foundChanges-Variable immer falsch ist und wenn Linq keine geeignete Lösung für dieses Problem bieten würde, oder muss ich die Änderungen bestimmen, indem ich über die DataSets

iteriere

Hier sind einige weitere Informationen: Die Programmiersprache ist C # Ich benutze .Net Framework 4.0 Ich entwickle auf einer Windows 8 Maschine Die genannten Daten stammen aus einer Datenbank (MSSQL Server 2012 Express) Meine DataSets oder DataTables haben keine PK's, soweit ich weiß.

Vielen Dank im Voraus

    
Bongo 27.12.2012, 14:02
quelle

3 Antworten

3

Ich denke, das Problem ist, dass Sie .NET DataSets nicht verstehen. Eine DataTable behält die "ursprüngliche" Kopie jedes Werts bei, der in es geladen wird. Wenn ein Wert geändert wird, kann die DataTable die Änderung erkennen. Ebenso verfolgt die DataTable Zeilen, die hinzugefügt oder gelöscht wurden. Die Funktion HasChanges() crawlt einfach durch die DataTables und überprüft, ob Änderungen vorgenommen wurden (geänderter Wert, neue Zeilen, gelöschte Zeilen usw.)

Siehe die MSDN-Dokumentation:
Ссылка

Der Vergleich zweier DataSets ist knifflig, und mir ist keine eingebaute Funktion bekannt, da jeder Programmierer seine eigene Definition von "Äquivalenz" haben wird.

Siehe:

Der folgende Code vergleicht zwei DataTables durch Suchen nach addierten / gelöschten Zeilen basierend auf einer Schlüsselspalte und modifizierten Zeilen durch Vergleichen der Werte übereinstimmender Zeilen (wiederum basierend auf dem Schlüssel). Es wäre ziemlich trivial, dies zu erweitern, um DataSets zu vergleichen (indem vergleichbar benannte Tabellen zwischen DataSets verglichen werden).

%Vor%

Konsolenausgabe:

  

Datensatz 2 wurde aus Tabelle 2 gelöscht.
  Datensatz 3 wurde zu Tabelle 2 hinzugefügt.
  Datensatz 1 wurde in Tabelle 2 geändert.

    
JDB 27.12.2012 14:09
quelle
0

Wenn das Schema der beiden Datensätze identisch ist, können Sie es unter einem

versuchen %Vor%

Wenn das Schema beider Datensätze unterschiedlich ist, müssen Sie es manuell tun.

    
Vijay Hulmani 27.12.2012 14:17
quelle
-1

Wie Sie aus einigen anderen Antworten sehen können, ist es nicht einfach, den Unterschied zwischen zwei DataSets zu ermitteln.

Das ist der Zweck von DataSet.GetChanges (). Wenn Sie mit einem Dataset beginnen und direkt Änderungen an diesem Dataset vornehmen (d. H. Wenn ein Benutzer eine Zelle aktualisiert, wenn ein Benutzer ein Formular sendet usw.), protokolliert das DataSet die Änderungen. Auf diese Weise können Sie DataSet.GetChanges () aufrufen, um die Änderungen (oder Unterschiede) abzurufen. Sie können dann nur die Änderungen bearbeiten.

Es ist ein schwieriges Problem, einen anfänglichen Datensatz und einen endgültigen Datensatz zu nehmen und die Unterschiede zu ermitteln. Auch das Zusammenführen des endgültigen Datensatzes mit dem alten Datensatz ist nicht sinnvoll, da der endgültige Datensatz das Ergebnis der Zusammenführung ist.

    
Nick Bray 27.12.2012 14:50
quelle

Tags und Links