Datenbankinhalte neu laden.

14/07/2008 - 13:59 von Ronald Rode | Report spam
Habe mein Problem vorhin in der falschen Newsgruppe gepostet. Ich bitte um
Entschuldigung.

Hallo NG,

folgende Situation: Ich habe eine Anwendung die über ein DataSet auf eine
Datenbank (DB1) auf einem SQL-Server 2000 zugreift. Das DataSet ist
typisiert. Beim starten des Programmes werden alle TableAdapter gefüllt. Das
DataSet beinhaltet eine Tabelle "Auftrag". Diese Tabelle bekommt ihre
Inhalte aus einer anderen Datenbank (DB2). Nun soll der Benutzer die
Möglichkeit haben die Daten der Tabelle Auftrag zu aktualisieren (aus DB2).
Nun ist aber das Problem das in dem DataSet fast alle Tabellen in Beziehung
mit der Auftragstabelle stehen. Meine Frage ist nun: Muss ich wirklich alle
Child-Tabellen löschen bevor ich die Auftragstabelle neu füllen kann? Es
werden keine Datensàtze gelöscht, nur ab und zu ein Beschreibung veràndert
etc. Gibt es nicht die Möglichkeit ein einfaches refresh auf dem Dataset zu
machen?

Vielen Dank

Ronald
 

Lesen sie die antworten

#1 Elmar Boye
14/07/2008 - 15:23 | Warnen spam
Hallo Ronald,

Ronald Rode schrieb:
folgende Situation: Ich habe eine Anwendung die über ein DataSet auf eine
Datenbank (DB1) auf einem SQL-Server 2000 zugreift. Das DataSet ist
typisiert. Beim starten des Programmes werden alle TableAdapter gefüllt. Das
DataSet beinhaltet eine Tabelle "Auftrag". Diese Tabelle bekommt ihre
Inhalte aus einer anderen Datenbank (DB2). Nun soll der Benutzer die
Möglichkeit haben die Daten der Tabelle Auftrag zu aktualisieren (aus DB2).
Nun ist aber das Problem das in dem DataSet fast alle Tabellen in Beziehung
mit der Auftragstabelle stehen. Meine Frage ist nun: Muss ich wirklich alle
Child-Tabellen löschen bevor ich die Auftragstabelle neu füllen kann?



Nicht unbedingt.
Wenn ein Primàrschlüssel für die Tabelle besteht, so ist "Fill"
in der Lage bestehende Datenzeilen zu aktualisieren.
Damit bekommst Du naturgemàß nicht mit, wenn ein Auftrag gelöscht
wurde - neue werden jedoch hinzugefügt.

Das geht solange gut, wie nicht eine Fremdschlüsselbeziehung
veràndert wird. Für das Aktualisieren sollte EnforceConstraints
deaktiviert werden damit die Ladeoperation schneller geht.

Als Anmerkung ist konzeptionell hàufig ein anderes Vorgehen besser:
Lade die Child Tabellen (Auftragspositionen etc) nur bei Bedarf
für den jeweils aktuellen Auftrag. Das vermindert den Speicherbedarf,
und hàlt so automatisch die Positionsdaten "frisch", d. h. auf dem
aktuellen Stand.

Für andere verknüpfte Tabellen (wie Kunden, Artikel) kann man auf
Fremschlüssel oft verzichten und nur mit Relationen arbeiten (denn
das kontrolliert besser die Datenbank).
Und so auch dort steuern, wann man die Daten nachlàdt.

Gruß Elmar

Ähnliche fragen