PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# DataAdapter


Kennung Eins
2004-12-10, 04:49:43
Ich murkele seit nunmehr 4 Tagen an einem Problem rum, wofuer ich noch immer keine Loesung gefunden habe.

Worum es eigentlich geht, ist ganz einfach:

Ich arbeite an einer Webanwendung, die Daten aus verschiedenen Tabellen einer Datenbank anzeigen und updaten soll.
Es werden erst alle Daten ausgelesen und in ein Grid gebannt, dann mochte ich ein DataAdapter.Update machen.

Und da liegt das Problem.

Also hier mal, was ich bisher habe:

Lesen:
Ein DataAdapter, der je Tabelle neu erstellt wird, und der das DataSet jeweils mit neuen Daten aus unterschiedlichen Tabellen fuellt.
Schreiben:
Ich erstelle ein neues SQL-Connection Object. Dann baue ich mit dem SQLCommandBuilder ueber meinem DataAdapter die Commands, dann kommt das DataAdapter(dataSet).

Lesen klappt wunderbar:

sqlcn=new SqlConnection(<blah>);

daVehicles = new SqlDataAdapter("SELECT ",sqlcn);
dataSet=new DataSet();
daVehicles.Fill(dataSet,"Tb_CJL_Vehicle");

daVehicles = new SqlDataAdapter("SELECT",sqlcn);
daVehicles.Fill(dataSet,"Tb_CJL_Airplane");

<...>

switch (RadioButtonList1.SelectedIndex)
{
case 0:
dgVehicles.DataSource = dataSet.Tables["Tb_CJL_Vehicle"];
break;
case 1:
dgVehicles.DataSource = dataSet.Tables["Tb_CJL_Airplane"];
break;
<...>
}

dgVehicles.DataBind();
}
Nun schreiben: sqlcn=new SqlConnection(<blah>);

SqlCommandBuilder sqlcmdbld = new SqlCommandBuilder( daVehicles );
daVehicles.UpdateCommand = sqlcmdbld.GetUpdateCommand();
daVehicles.DeleteCommand = sqlcmdbld.GetDeleteCommand();
daVehicles.InsertCommand = sqlcmdbld.GetInsertCommand();


daVehicles.Update( dataSet ); // Error hier!

dgVehicles.EditItemIndex = -1;
switch (RadioButtonList1.SelectedIndex)
{
case 0:
dgVehicles.DataSource = dataSet.Tables["Tb_CJL_Vehicle"];
break;
case 1:
dgVehicles.DataSource = dataSet.Tables["Tb_CJL_Airplane"];
break;
<...>
}
dgVehicles.DataBind();

Der Fehler, den ich krieg, lautet:
"Dynamic SQL generation is not supported against multiple base tables. "

Und das verstehe ich nicht. Sollte der DataAdapter nicht auch multiple tables updaten koennen?

grakaman
2004-12-10, 22:49:57
Hi


Und das verstehe ich nicht. Sollte der DataAdapter nicht auch multiple tables updaten koennen?

Dem DataAdapter ist das eigentlich egal, aber der CommandBuilder kann das anscheinend nur für eine Tabelle. Schau mal nach, ob du bei deiner Tabelle und DataSet auch entsprechende PK und FK definiert hast. Wenn es dann immer noch nicht geht, kann er das wohl wirklich nur für eine Tabelle. Aber es ist sowieso besser, jeweils ein extra Command Objekt für Update/Delete Eigenschaft des DataAdapters festzulegen, da performanter.

Kennung Eins
2004-12-11, 00:08:12
Hmm also ich habs so nicht hinbekommen und jetzt halt einfach wirklich mehrere "Adaptoren" ;) definiert. Thx, graka. Das ist zwar bloed, aber geht nun dann doch endlich.

Und ich habe nach ewig vielen Tagen festgestellt, dass man die Tabellen im dataSet ja doch auch vielleicht noch mit den ins Grid eingegebenen Daten updaten sollte. :bonk:
Bin ich bloed. Mannomann.