Bernd M.: DataTable + Update persistieren

Hallo,

ich habe ein Problem mit der DataTable. Und zwar erstelle ich
einen OdbcDataApater, für den ich ein SELECT-Statement definiere.
Später editiere ich Daten einzelner DataRows, die ich dann mittels
der Update-Methode des DataAdapters persistieren möchte. Allerdings
bekomme ich hier folgende Fehlermeldung:
Update requires a valid UpdateCommand when passed DataRow collection
with modified rows.
Beim Debuggen erfahre ich, dass der DataAdapter tatsächlich lediglich
ein Select-Statement zu Verfügung stellt. Doch so wie ich das verstanden
habe, sollten mir doch automatisch das zugehörige Update- und Delete-
Statement generiert werden. Warum geschieht das nicht?
In paar Foren steht, dass ich das Update-Statement manuell setzen
muss. Doch macht dann der ganze Automatismus, den den DataAdapter
eigentlich anbietet, recht wenig Sinn.

Hier mein Code:
DataTable dtbl = this.GetUserById(User.MyCBAdminID);
DataRow dr = dtbl.Rows[0];
dr[ConstDBMappings.DB_USER_NAME] = "blbblb";
dr[ConstDBMappings.DB_USER_MOBILE_NR] = "7676767676";
OpenConnection();
OdbcDataAdapter userAdapter = GetDataAdapterFor(DataAdapter.User);
userAdapter.Update(dtbl.GetChanges());
dtbl.AcceptChanges();
CloseConnection();

GetDataAdapterFor(..) sorgt dafür, dass ich den identischen
Adapter bekomme, den auch die Methode GetUserById() nutzt.

Kann mir einer hierbei vielleicht behiflich sein?

Besten Dank
 Bernd M.

  1. Hi,

    woher soll der arme DataAdapter wissen, wie er Daten wieder in die
    Tabelle der DB zurückschreiben soll, wenn er nur weiss wie er sie
    lesen _kann_?

    MaW: Du musst dem DataAdapter für den Update, Insert und Delete Vorgang,
    der deinen DataTable Daten zustossen kann auch ein entsprechendes
    Command (OdbcCommand) mitgeben.

    Am einfachsten geht dies durch die Verwendung eines OdbcCommandBuilder
    Objektes:

    http://msdn.microsoft.com/library/DEU/cpref/html/frlrfsystemdataodbcodbccommandbuilderclasstopic.asp

    Doch macht dann der ganze Automatismus, den den DataAdapter
    eigentlich anbietet, recht wenig Sinn.

    Du bist etwas verwöhnt? Nur weil es von MS ist und .Net heisst, bedeutet
    es noch lange nicht, dass es von allein funktioniert. ;)

    Ciao, Frank

    1. Hallo Frank,

      danke für deine Antwort. Werde mir den Link mal anschauen.

      woher soll der arme DataAdapter wissen, wie er Daten wieder in die
      Tabelle der DB zurückschreiben soll, wenn er nur weiss wie er sie
      lesen _kann_?

      Soo abwegig ist das ja nun mal auch nicht. Ein Automatismus hierbei
      könnte ich mir durchaus vorstellen.

      MaW: Du musst dem DataAdapter für den Update, Insert und Delete
      Vorgang, der deinen DataTable Daten zustossen kann auch ein
      entsprechendes Command (OdbcCommand) mitgeben.
      Am einfachsten geht dies durch die Verwendung eines
      OdbcCommandBuilder Objektes:

      Klingt logisch.

      Du bist etwas verwöhnt? Nur weil es von MS ist und .Net heisst,
      bedeutet es noch lange nicht, dass es von allein funktioniert. ;)

      Da könntest Du Recht haben. Dieses ganze Drag&Drop Bunti Geklicke
      führt einen schon manchmal auf komische Gedanken.

      Grüße aus Berlin
       Bernd m.