Frage

Was ist der beste Ansatz einen Datensatz mit Daten in einer Datenbank zu synchronisieren? Hier sind die Parameter:

  • Wir können nicht einfach die Daten neu zu laden, weil es auf ein UI-Steuerelement gebunden ist, die ein Benutzer konfiguriert haben (es ist ein Baum Gitter, das sie erweitern kann / Kollaps)
  • Wir können keine changeflag verwenden (wie ein UpdatedTimeStamp) in der Datenbank, da Änderungen nicht immer die Anwendung fließen durch (zum Beispiel eines DBA ein Feld mit einer SQL-Anweisung aktualisieren könnte)
  • Wir können kein Update Trigger in der Datenbank verwenden, da es sich um ein Multi-User-System ist
  • Wir sind mit ADO.NET-Datasets
  • können mehrere Felder einer bestimmten Zeile ändern

Ich habe an den DataSet Merge Fähigkeit gesucht, aber dies scheint nicht den Begriff der Spalte „ID“ zu halten. Ich habe bei DiffGram Fähigkeit gesucht, aber das Problem hier ist, scheinen diejenigen, die aus Änderungen im gleichen Datensatz erzeugt werden, anstatt Änderungen, die auf einer externen Datenquelle aufgetreten.

Ich habe für eine Weile aus dieser Lösung läuft aber der Ansatz, den ich kenne funktionieren würde (mit viel ineffeciency) ist ein separates DataSet zu bauen und iterieren dann alle Zeilen der Anwendung ändert, Feld für Feld, auf das DataSet die sie gebunden ist.

Hat jemand ein ähnliches Szenario hat? Was haben Sie das Problem zu lösen? Auch wenn Sie nicht in ein ähnliches Problem ausgeführt haben, eine Empfehlung für eine Lösung sehr geschätzt wird.

Danke

War es hilfreich?

Lösung

DataSet.Merge funktioniert gut für diese , wenn Sie haben einen Primärschlüssel für jede Datentabelle definiert; der Datensatz wird auf alle Databound-GUI-Controls geänderte Ereignisse auslösen

Wenn Sie Ihre Tabelle klein ist, können Sie einfach alle Zeilen neu zu lesen und in regelmäßigen Abständen zusammenführen, da sonst die eingestellten Begrenzung mit einem Zeitstempel zu lesen ist eine gute Idee - nur die DBAs sagen, die Regeln zu befolgen und den Zeitstempel zu aktualisieren; -)

Ein andere Möglichkeit -, das ein wenig Arbeit ist - ist es, eine veränderte-row Warteschlange zu halten (Zeitstempel, Reihe ID) unter Verwendung einen Trigger oder gespeicherte Prozedur, und die Basis der Refresh-Abfragen aus dem Zeitstempel in der Warteschlange; dies wird effizienter, wenn die Basistabelle eine Menge von Zeilen in ihm hat, so dass Sie (über eine innere in der Warteschlange Datensatz beitreten) nur die geänderten Zeilen, die seit der letzten Umfrage Zeit ziehen.

Andere Tipps

ich denke, es wäre einfacher, eine Liste der Knoten zu speichern, die der Benutzer erweitert hat (vorausgesetzt, Sie jeden eindeutig identifizieren können), dann die Daten erneut laden und neu binden sie an der Baumansicht, und erweitern alle Knoten vorher erweitert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top