NpgsqlDataAdapter will nicht updaten

12/01/2009 - 19:57 von Michael Schiffer | Report spam
Hi,

ich lade über einen NpgsqlDataAdapter 3 Tabellen in ein Dataset:

Das NpgsqlCommand:
"SELECT * FROM y;SELECT * FROM y;SELECT * FROM z;"

NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
NpgsqlCommandBuilder cb = new NpgsqlCommandBuilder(da);
DataSet dataset = new DataSet();

Das Füllen:
da.Fill(dataset);

Jetzt sind die richtigen Daten im dataset. Um einfacher zugreifen zu
können, lege ich mir noch "Verknüpfungen" an:
DataTable x = dataset.Tables[0];
DataTable y = dataset.Tables[1];
DAtaTable z = dataset.Tables[2];

Wenn ich jetzt mit z.newRow(); eine neue Reihe erzeuge, diese dann mit
z.Rows.Add(); hinzufüge, ist sie danach auch in z enthalten.

Allerdings scheint bei einem Aufruf von da.Update(dataset) nichts zu
passieren. Die Daten landen nicht in der Datenbank. Es entsteht auch
kein Traffic über das Netz. Was mache ich falsch?

Zusàtzlich ist mir aufgefallen: Wenn ich da.Update(z) aufrufe, kommt
eine Fehlermeldung, dass in der Source keine Spalte mit einem
Spaltennamen aus der TAbelle x gefunden wurde. Wie kann das sein?

Hatte jemand das Problem schomal und kann mir helfen?

mfg
Michael
 

Lesen sie die antworten

#1 Elmar Boye
12/01/2009 - 22:15 | Warnen spam
Hallo Michael,

Michael Schiffer schrieb:
ich lade über einen NpgsqlDataAdapter 3 Tabellen in ein Dataset:

Das NpgsqlCommand:
"SELECT * FROM y;SELECT * FROM y;SELECT * FROM z;"

NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
NpgsqlCommandBuilder cb = new NpgsqlCommandBuilder(da);
DataSet dataset = new DataSet();

Das Füllen:
da.Fill(dataset);

Jetzt sind die richtigen Daten im dataset. Um einfacher zugreifen zu
können, lege ich mir noch "Verknüpfungen" an:
DataTable x = dataset.Tables[0];
DataTable y = dataset.Tables[1];
DAtaTable z = dataset.Tables[2];

Wenn ich jetzt mit z.newRow(); eine neue Reihe erzeuge, diese dann mit
z.Rows.Add(); hinzufüge, ist sie danach auch in z enthalten.

Allerdings scheint bei einem Aufruf von da.Update(dataset) nichts zu
passieren. Die Daten landen nicht in der Datenbank. Es entsteht auch
kein Traffic über das Netz. Was mache ich falsch?



Der Standard DbCommandBuilder, den Microsoft in .NET 2.0 verwendewt,
berücksichtigt immer nur die erste Tabelle im SelectCommand.
Und ich gehe davon aus der von PostgreSQL hàlt es nicht anders -
auch wenn ich ihn nie verwendet habe.

Du müsstest also drei CommandBuilder erzeugen, für jede Tabelle einen.
Dort darf jeweils nur das SELECT für die jeweilige Tabelle erfolgen.

Damit der CommandBuilder funktioniert müssen die Tabellen einen
Primàrschlüssel haben.

Gruß Elmar

Ähnliche fragen