Announcement

Collapse
No announcement yet.

dataset dynamisch befüllen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • dataset dynamisch befüllen

    hallo
    ich habe folgendes problem: ich möchte eine Datenbank updaten und weiß das dies nur über einen dataset geht nur weiß ich nicht wie ich diesen dataset dynamisch befüllen kann. zur zeit bin ich so weit:
    Code:
    string selectCommand = "SELECT * FROM cell_preferences_theory";
                OdbcDataAdapter adapter = new OdbcDataAdapter(selectCommand, database_connection);
                adapter.Fill(mydataset);
                adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    
                string query_update = "UPDATE cell_preferences_theory SET cellVisibilityTheory = " + cell_visibility +
                    ", cellOrderPositionTheory = " + cell_order_position +
                    " WHERE cellNameTheory = " + array_cell_preferences_data[i].ToString();
    
                adapter.UpdateCommand = new OdbcCommand(query_update);
    nur weiß ich jetzt nicht wie ich das dataset befüllen kann oder wie ich das updaten kann. da ich noch ein anfänger in solchen sachen bin. kann mir wer helfen.
    lg sabine

  • #2
    Hallo sabine,

    Die Methode 'DataAdapter.Fill' gibt dir bereits eine 'befuelltes' DataSet mit den Daten deines Select Commands retour, daher nehme ich an, dass du mit 'befuellen' das Neuhinzufuegen von Daten aus deinem Code heraus meinst.

    Das wuerde in etwa so ausschauen:
    Code:
    if (mydataset.Tables.Count != 0)
    {
        DataRow newRow = mydataset.Tables[0].NewRow();
        newRow["Spalte1"] = "blabla";
        newRow["Spalte2"] = DateTime.Now;
        newRow["Spalte3"] = 20;
        mydataset.Tables[0].Rows.Add(newRow);
    }
    Mit der Methode 'DataSet.HasChanges()' kannst du abfragen, ob sich die Daten im DataSet ueberhaupt geaendert haben.

    Code:
    if (mydataset.HasChanges(DataRowState.Modified))
    { /* update */ }
    else if (mydataset.HasChanges(DataRowState.Added))
    { /* insert */ }
    else if (mydataset.HasChanges(DataRowState.Deleted))
    { /* delete */ }
    Zum dynamischen Erstellen von Update- / Insert- und Delete-Commands gibt es ebenfalls eine nette Methode ... muss ich dir derzeit schuldig bleiben, da ich mir diese Methode selbst erst wieder heraussuchen bzw den Code, in dem ich sie verwendet habe, wieder finden muss

    Hoffe das hilft dir in der Zwischenzeit weiter.
    *-- robert.oh. --*

    Comment


    • #3
      Das dynamische Erzeugen von den Update- / Insert- und Delete-Commands sollte in etwa so funktionieren:

      Code:
      adapter.SelectCommand.CommandText = "SELECT ....";
      SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
      if (mydataset.HasChanges(DataRowState.Added))
      // es muessen daten eingefuegt werden
      {
          adapter.InsertCommand = builder.GetInsertCommand();
          adapter.Update(mydataset.GetChanges(DataRowState.Added));
      }
      if (mydataset.HasChanges(DataRowState.Modified))
      // es muessen daten aktualisiert werden
      {
          adapter.UpdateCommand = builder.GetUpdateCommand();
          adapter.Update(mydataset.GetChanges(DataRowState.Modified));
      }
      if (mydataset.HasChanges(DataRowState.Deleted))
      // es muessen daten geloescht werden
      {
          adapter.UpdateCommand = builder.GetDeleteCommand();
          adapter.Update(mydataset.GetChanges(DataRowState.Deleted));
      }
      Der obige Code kann Fehler enthalten, aber ich hoffe trotzdem, dass er dir weiterhilft.
      *-- robert.oh. --*

      Comment


      • #4
        Doppelte Posts in mehreren Unterforen sind eine Gemeinheit für die Antwortgeber! Immer müssen sich mehrere Gedanken machen, ohne voneinander zu wissen! Außerdem ist eindeutig, dass Datasets zu ADO.NET gehören, aber nicht zur Sprache C#. Also gehören die Antworten von Robert auch hierher.

        Zusatz: Die Trennung der Updates nach RowState in Roberts Vorschlag ist in dieser Form überflüssig; das macht die Update-Methode von alleine. (Man kann es in bestimmten Situationen machen, aber meistens ist es nicht nötig.)

        Jürgen

        Comment


        • #5
          Hallo Juergen,

          Du hast natuerlich recht, die Update-Methode macht das automatisch, aber ich wollte nur die Moeglichkeiten aufzeigen, da ich selber diese Trennung schon einmal gebraucht habe.
          *-- robert.oh. --*

          Comment

          Working...
          X