Übersicht über die hierarchische Aktualisierung

Hierarchische Aktualisierung bezieht sich auf das Zurückspeichern der aktualisierten Daten eines DataSets aus mindestens zwei verknüpften Tabellen in eine Datenbank unter Erhaltung der referenziellen Integrität. Referenzielle Integrität bezeichnet die Konsistenzregeln, die in einer Datenbank durch die Fremdschlüsseleinschränkungen bereitgestellt werden. Diese steuern das Verhalten beim Einfügen, Aktualisieren und Löschen von verknüpften Datensätzen. Beispielsweise werden Sie durch die referenzielle Integrität gezwungen, einen Kundendatensatz zu erstellen, bevor Sie Bestellungen für diesen Kunden erstellen.

Wenn Entwickler in Visual Studio 2005 oder früheren Versionen Datenanwendungen erstellt haben, wurden geänderte Daten von automatisch generiertem Code nur in der Tabelle gespeichert, die als erste aus dem Datenquellenfenster gezogen wurde. Beim Ziehen weiterer Tabellen aus dem Fenster Datenquellen mussten die Benutzer den Code zum Speichern von Änderungen in diesen Tabellen in der Datenbank manuell hinzufügen. Die Benutzer mussten nicht nur für jede Tabelle Code zum Aufrufen der TableAdapter.Update-Methode hinzufügen, es musste auch für jede Tabelle die Logik zum Durchführen der spezifischen Einfüge-, Aktualisierungs- und Löschvorgänge in der geeigneten Reihenfolge integriert werden, um Verletzungen der referenziellen Integrität zu verhindern. (Beispielweise müssen neue Kunden gespeichert werden, bevor Sie die zugehörigen Bestellungen hinzufügen, und bevor Sie einen vorhandenen Kunden löschen, müssen dessen Bestellungen gelöscht werden.)

Ab Visual Studio 2008 werden typisierte Datasets durch eine neue TableAdapterManager-Komponente ergänzt. TableAdapterManager verringert den Code, der zum Speichern von Daten in mehreren verknüpften Tabellen erforderlich ist, von mehreren Routinen mit vielen Codezeilen auf einen einzigen Methodenaufruf: TableAdapterManager.UpdateAll(TypedDataset). TableAdapterManager stellt die gesamte zugrunde liegende Logik bereit, die erforderlich ist, um die referenzielle Integrität bei Aktualisierungs- bzw. Speicheroperationen zwischen dem DataSet und der Datenbank zu erhalten. Weitere Informationen finden Sie unter Übersicht über TableAdapterManager.

Aktivieren der hierarchischen Aktualisierung in einem DataSet

Standardmäßig wird die hierarchische Aktualisierung für alle neuen DataSets aktiviert, die in einem Projekt hinzugefügt oder erstellt werden. Sie können die hierarchische Aktualisierung aktivieren bzw. deaktivieren, indem Sie die Eigenschaft Hierarchische Aktualisierung eines typisierten DataSets im DataSet-Designer auf True bzw. False festlegen. Ausführliche Informationen finden Sie unter Gewusst wie: Aktivieren und Deaktivieren der hierarchischen Aktualisierung.

Fremdschlüsseleinschränkungen und Aktualisierungs- und Löschweitergaben

Es ist wichtig, dass Sie nachvollziehen können, wie die Fremdschlüsseleinschränkungen und das Weitergabeverhalten in der Datenbank im generierten DataSet-Code erstellt werden.

Standardmäßig werden die Datentabellen in einem DataSet mit Beziehungen (DataRelation) generiert, die den Beziehungen in der Datenbank entsprechen. Jedoch wird die Beziehung im DataSet nicht als Fremdschlüsseleinschränkung generiert. Die DataRelation wird praktisch als Nur Beziehung ohne eine UpdateRule oder DeleteRule konfiguriert.

Standardmäßig sind Aktualisierungs- und Löschweitergaben deaktiviert, auch wenn Aktualisierungs- und/oder Löschweitergaben für die Datenbankbeziehung aktiviert sind. Beispielsweise kann das Erstellen eines neuen Kunden und einer neuen Bestellung sowie das anschließende Speichern der Daten einen Konflikt mit den in der Datenbank definierten Fremdschlüsseleinschränkungen verursachen. Weitere Informationen finden Sie unter Gewusst wie: Konfigurieren von Fremdschlüsseleinschränkungen in einem DataSet.

Festlegen der Reihenfolge zum Durchführen von Aktualisierungen

Durch das Festlegen der Reihenfolge, in der Aktualisierungen durchgeführt werden, wird die Reihenfolge der einzelnen erforderlichen Einfüge-, Aktualisierungs- und Löschvorgänge festgelegt, um die gesamten geänderten Daten in allen Tabellen eines DataSets zu speichern. Bei aktivierter hierarchischer Aktualisierung werden zuerst die Einfügevorgänge, dann die Aktualisierungen und anschließend die Löschvorgänge durchgeführt. Der TableAdapterManager stellt die UpdateOrder-Eigenschaft bereit, die Sie festlegen können, um zuerst die Aktualisierungen, dann die Einfüge- und anschließend die Löschvorgänge durchzuführen.

Tipp

Beachten Sie unbedingt, dass die Aktualisierungsreihenfolge für alle Vorgänge gilt. Das bedeutet, dass beim Durchführen von Aktualisierungen zuerst Einfügevorgänge für alle Tabellen im DataSet, danach Aktualisierungen für alle Tabellen im DataSet und anschließend Löschvorgänge für alle Tabellen im DataSet ausgeführt werden.

Um die UpdateOrder-Eigenschaft festzulegen, nachdem Sie Elemente aus dem Datenquellenfenster auf ein Formular gezogen haben, klicken Sie auf der Komponentenleiste auf den TableAdapterManager, und legen Sie die UpdateOrder-Eigenschaft im Fenster Eigenschaften fest. Weitere Informationen finden Sie unter Gewusst wie: Festlegen der Reihenfolge beim Durchführen einer hierarchischen Aktualisierung.

Erstellen einer Sicherungskopie von einem DataSet vor dem Durchführen einer hierarchischen Aktualisierung

Beim Speichern von Daten (durch Aufrufen der TableAdapterManager.UpdateAll()-Methode) aktualisiert der TableAdapterManager die Daten für jede Tabelle in einer einzelnen Transaktion. Wenn ein Teil der Aktualisierung für eine Tabelle fehlschlägt, wird für die gesamte Transaktion ein Rollback ausgeführt. In den meisten Fällen wird die Anwendung durch ein Rollback der Transaktion in ihren ursprünglichen Zustand zurückgesetzt. Manchmal möchten Sie das DataSet jedoch möglicherweise aus der Sicherungskopie wiederherstellen, beispielsweise bei der Verwendung von automatisch inkrementierten Werten. Wenn beispielsweise ein Speichervorgang nicht erfolgreich ist, werden die automatisch inkrementierten Werte im DataSet nicht zurückgesetzt. Beim weiteren Erstellen von automatisch inkrementierten Werten im DataSet entsteht somit in der Nummerierung eine Lücke, die in der Anwendung möglicherweise problematisch sein kann. Für Fälle, in denen dies zu einem Problem führt, stellt der TableAdapterManager die BackupDataSetBeforeUpdate-Eigenschaft bereit, durch die das vorhandene DataSet beim Fehlschlagen der Transaktion durch eine Sicherungskopie ersetzt wird.

Tipp

Die Sicherungskopie ist nur während der Ausführung der TableAdapterManager.UpdateAll-Methode im Arbeitsspeicher vorhanden. Deshalb können Sie auf dieses gesicherte DataSet nicht programmgesteuert zugreifen, da es das ursprüngliche DataSet ersetzt oder ungültig wird, sobald die Ausführung der TableAdapterManager.UpdateAll-Methode beendet ist.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Speichern von Daten aus verknüpften Datentabellen (Hierarchische Aktualisierung)

Konzepte

Neues in der Datenanwendungsentwicklung

Übersicht über TableAdapterManager

Weitere Ressourcen

Speichern von Daten

Hierarchische Aktualisierung