Announcement

Collapse
No announcement yet.

DataAdapter, allgemeine Frage zur Funktionsweise und Problem

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

  • DataAdapter, allgemeine Frage zur Funktionsweise und Problem

    Hallo zusammen!

    Ich habe das Problem, das bei meiner Datenbankanwendung zwar alle meine Änderungen im DataSet übernommen werden ( ich sehe sie wenn ich mir den Inhalt des DataSet angucke), aber sie kommen nicht in der Datenbank an.
    Ich weiss das ich die Update() Methode des DataAdapters aufrufen muss ( und vorher die AcceptChanges() des DataSets). Desweiteren hat mein Adapter Insert und Update Commands ( selbstgemacht, nicht mit dem Commandbuilder).
    Aber egal wie mein Insert Command aussieht, nix kommt in der DB an.

    Deshalb, bevor ich den Code poste, die eher allgemeine Frage:
    Gebe ich einem DataAdapter immer ein SQL-Command mit Parametern, die dann sofort auch spezifieziere ( also welche Typ, welche Tabelle etc...), aber niemals selber mit Werten belege? Der DataAdapter erkennt doch beim Aufruf der Update Methode doch von alleine, welche Einträge sich geändert haben, und nur die werden dann geändert.
    Setzt er dann von sich aus die Werte in die Parameter-Platzhalter im SQL Command?
    Eigentlich hab ich schon "alles" versucht. Den SQL String per Konkatenation mit den Variablen selbst "zusammenstecken", die Parameter da übergeben wo die entsprechenden Werte bekannt sind, oder halt keine Parameter übergeben. Nix funzt.

    Vorab: Ich schreib in C# eine Anwendung mit einer Access DB.

    hier die Initialisierung meines DataAdapters:

    P.S.: Ja ich bin ein ziemlicher Anfänger und hab gleichzeitig recht viel Druck das mein Programm endlich läuft

    Code:
    projekteAdapter = new OdbcDataAdapter();

    OdbcCommand insProjekte = new OdbcCommand();
    insProjekte.Connection = myConnection;
    insProjekte.CommandText = "INSERT INTO Projekte ([BV_Name], [BV_Nr]) VALUES (?,?)";


    insProjekte.Parameters.Add("[BV_Name]", OdbcType.Text, 50); insProjekte.Parameters.Add("[BV_Nr]", OdbcType.Text, 50);

    OdbcCommand updProjekte = new OdbcCommand();
    updProjekte.Connection = myConnection;
    updProjekte.CommandText = "UPDATE Projekte SET [BV_Name] = ?, [BV_Nr] = ? ";

    insProjekte.Parameters.Add("[BV_Name]", OdbcType.Text, 50);
    insProjekte.Parameters.Add("[BV_Nr]", OdbcType.Text, 50);

    und hier der Aufruf der Update-Methode:

    Code:
    myDataSet.AcceptChanges();
    erGOPausen2.MainInstance._ProjekteAdapter.InsertCo mmand.Parameters["[BV_Name]"].Value = bv_Name;
    erGOPausen2.MainInstance._ProjekteAdapter.InsertCo mmand.Parameters["[BV_Nr]"].Value = bv_Nr;
    erGOPausen2.MainInstance._ProjekteAdapter.Update(m yDataSet, "Projekte");

    wie gesagt, diese Belegung der Parameter ist eine von vielen Versuchen, die ich hinter mir habe.
    Und ich bekomme keine Fehlermeldung...
    Es kommt einfach nix in der DB an...

    Bin für jede Hilfe SEHR dankbar!!

  • #2
    Hallo,

    wieder der gleiche Fehler. Man darf vor dem Update nicht AcceptChanges aufrufen. Beim einfügen oder bearbeiten von Daten werden im DataSet die entsprechenden Datensätze als eingefügt oder modifiziert gekennzeichnet. Über die Update Methode des DataAdapter sucht dieser nach eben solchen Kennzeichen genauer nach dem RowState. Wenn er den RowState Modified gefunden hat ruft er für diesen Datensatz das UpdateCommand auf und übergibt die notwendigen Parameter. Sind alle Änderungen (Updates, Inserts, Deletes) abgearbeitet ruft der DataAdapter AcceptChanges auf.

    AcceptChanges setzt alle Änderungen des RowStates zurück. Wie Herr Kosch schon öfters gesagt hat: Die Daten werden wieder als jungfräulich gekennzeichnet.

    Man muss nur AcceptChanges aufrufen wenn man Updates und Inserts und Deletes mit eigenen Commands macht und nicht über den DataAdapter arbeitet.

    Nun die Hilfe für dich: Lösch die Zeile mit AcceptChanges. Die brauchst du nicht, da du mit einem DataAdapter arbeitest.

    Der Fehler wurde schon häufiger nachgefragt. Wo hast das her, das du vor dem Update AcceptChanges aufrufen sollst??

    Comment


    • #3
      Hallo,

      vielleicht war das auch nur eine Verwechslung, weil eigentlich die CurrencyManager-Methode <b>EndCurrentEdit</b> gemeint war

      Comment


      • #4
        man man man, da kriegt man es doch im Kopf.

        Ich muss das wohl beim "nachlesen" einfach falsch verstanden haben (so nach dem Motto: Damit kein Mist gespeichert wird, muss man es nochmal bestätigen -- was ja im DataSet keinen Sinn macht, wie ich gerade einsehen muss).

        Da ist es ja kein Wunder das ich den Fehler stundenlang ( ich sag lieber nicht wieviele) gesucht habe, wenn ich genau die Zeile, die den Fehler beinhaltet, für die einzig richtige gehalten habe...

        Naja, jetzt kann ich ja wieder meine Zähne aus dem Keyboard ziehen...

        Vielen vielen Dank für die Hilfe!
        (so wie ich mich kenne, gehts jetzt zwar immer noch nicht, aber schonmal ein dicker Fehler weniger *g*

        Comment

        Working...
        X