Laden...

XML Import in DB-Tabelle

Erstellt von kruprecht vor 11 Jahren Letzter Beitrag vor 11 Jahren 632 Views
kruprecht Themenstarter:in
11 Beiträge seit 2012
vor 11 Jahren
XML Import in DB-Tabelle

verwendetes Datenbanksystem: Oracle 11

Hallo,

ich möchte mit folgendem Code in XML-File einlesen (angenommen, das wurde mit WriteXML aus der DB generiert und dann geringfügig verändert, sodass sich ein UPDATE und ein INSERT ergeben sollten) und anschliessend in eine entsprechende Tabelle schreiben (lassen).
Ich dachte eigentlich, dass der UPDATE so schlau ist, um je nach Bedarf ein UPDATE oder ein INSERT zu generiern. Ich bekomme jedenfalls bloß die Meldung von der DB, dass der Datensatz bereits existiert, was ja auch korrekt ist.
Geht das nicht oder muss ich noch was drehen?
Danke

string constr = "User Id=UID;Password=PWD;Data Source=DSN";
string cmdstr = "SELECT * from table";

try
{
// Create the adapter with the selectCommand txt and the
// connection string
OracleDataAdapter adapter = new OracleDataAdapter(cmdstr, constr);

// Create the builder for the adapter to automatically generate
// the Command when needed
OracleCommandBuilder builder = new OracleCommandBuilder(adapter);

// Create and fill the DataSet using the table
DataSet dataset = new DataSet();
dataset.ReadXml("c:\\table.xml");
adapter.Fill(dataset, "TABLE");
DataTable table = dataset.Tables["TABLE"];

// Now update the TABLE using the adapter
// The OracleCommandBuilder will create the UpdateCommand for the
// adapter to update the TABLE table
adapter.Update(dataset, "TABLE");
}
catch (Exception ex)
{
MessageBox.Show("Fehler: " + ex.Message);
}
5.658 Beiträge seit 2006
vor 11 Jahren

Hi kruprecht,

Wenn eine Anwendung die Update-Methode aufruft, untersucht der DbDataAdapter die RowState-Eigenschaft und führt die erforderlichen INSERT-Anweisungen, UPDATE-Anweisungen oder DELETE-Anweisungen basierend auf der im DataSet konfigurierten Reihenfolge der Indizes iterativ für jede Zeile aus.

(siehe DbDataAdapter.Update-Methode)

Du mußt also anhand deiner Indizes festlegen, wann erstellt, gelöscht oder aktualisiert werden soll. Ansonsten weiß die Datenbank nicht, welche Datensätze schon vorhanden sind.

Christian

Weeks of programming can save you hours of planning

F
10.010 Beiträge seit 2004
vor 11 Jahren

Wenn du nur WriteXml machst wird nur der Datenbestand, aber nicht der Status der Daten gespeichert.
Wenn du den auch haben willst musst du das bei WriteXml mit angeben.