Parallelitätsverletzung bei UpdateAll

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von GünterD.

    Parallelitätsverletzung bei UpdateAll

    Hallo Zusammen,

    ich brauchte einen Tipp um folgenden Fehler zubeheben:

    Beim Speichern in eine SQL-Tabelle mit .UpdateAll bekomme ich "bei" einer bestimmten Bindingsource folgende Fehlermeldung

    "Parallelitätsverletzung: Der UpdateCommand hat sich auf 0 der erwarteten 1 Datensätze ausgewirkt."

    Hier ein Code-Auszug

    VB.NET-Quellcode

    1. ...
    2. Me.StABS.EndEdit()
    3. Me.TableAdapterManager.UpdateAll(Me.TDBDataSet)



    Könntet ihr mir einen Tipp geben, wie ich die Ursache finden kann?

    *Topic verschoben*
    Gruß Günter

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Mit SQLite, das war ich nicht.

    Habe nochmals was ins Detail geschaut.

    Hier noch einige Erkenntnisse.
    - es schreibt "keiner" zwischenzeitlich in die Tabelle
    - beim 1. Speichern (spezieller Button drücken) kommt noch keine Meldung, die Tabelle wird aber auch nicht aktualisiert
    - beim 2. Speichern ( 5-10 Sekunden später) kommt die Fehlermeldung.
    Gruß Günter

    GünterD schrieb:

    die Tabelle wird aber auch nicht aktualisiert
    Da sollte angesetzt werden. Klingt nämlich so, als ob da der Compiler oder die DB noch schwer beschäftigt ist, auf jeden Fall das Ganze blockiert und beim 2. Versuch dann der Crash vorprogrammiert ist. Also: Erstmal schauen, warum es beim "speziellen Button" nicht mit dem TableContentUpdate klappt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ... bin einige Schritte weiter ...

    Ich habe festgestellt, dass der Fehler nicht mehr kommt und die SQL-Tabelle auch aktualisiert wird, wenn ich den Befehl

    VB.NET-Quellcode

    1. tb_LetzteAktualisierung.Text = DateTime.Now.ToString
    nicht durchführe.

    Diese Textbox 'hängt' an einem Feld einer Bindingsource (BS) (--> SQL-Tabelle).
    Dieses Feld hat in der Datenbank den Typ datetime2(7).

    Zusammengefasst
    - speichern funktioniert ohne Fehler nur ohne Änderung des BS-Felds tb_LetzteAktualisierung
    --> habe rausgefunden, dass das Schreiben des aktuellen Datums in die Textbox zwar funktioniert aber die DB dies 'nicht mag'.
    --> Also schreibe ich jetzt das aktuelle Datum mit

    VB.NET-Quellcode

    1. rwK.letzteAktualisierung = DateTime.Now
    direkt in die BS und es funktioniert :thumbsup:

    Ich habe aber immer noch das Problem, dass .HasChanged bei Änderung eines BS-Felds, nicht erkannt!!!!!

    Wie könnte ich rausfinden was fehlt?
    Gruß Günter

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „GünterD“ ()

    Ich habe den Eindruck, dir ist nicht richtig klar, was passiert.
    Was meinst du mit BS-Feld? BindingSource-Feld, meinst du die BindingSource? BindingSources haben keine Felder.

    VB.NET-Quellcode

    1. rwK.letzteAktualisierung = DateTime.Now
    - rwK ist keine BindingSource, es ist sicherlich eine typisierte Datarow.
    Ansonsten ist das genau die richtige Massnahme - codeseitig sollte man nie in datengebundene Controls schreiben - immer direkt in die Daten.
    Databinding sorgt dann dafür, dass die Änderung auch dem User präsentiert wird.

    GünterD schrieb:

    Ich habe aber immer noch das Problem, dass .HasChanged bei Änderung eines BS-Felds, nicht erkannt!!!!!
    Wie gesagt: ein BindingSource-Feld gibt es überhaupt nicht.
    Wenn du die Änderung korrektamente an der typisierten DataRow durchführst, dann wird .HasChanges auch erkannt.
    Das kannst du ja einfach nachprüfen, durch eine Debug-CodeZeile, bzw mit dem ÜberwachungsFenster an einem Haltepunkt.

    Ich sehe zwei Möglichkeiten, warum HasChanges scheinbar nicht erkannt wird:
    1. unsachgemässer Aufruf von .AcceptChanges()
      mach eine Volltextsuche im Code danach. Nur Fachleute wissen .AcceptChanges() richtig zu verwenden, und verwenden es fast nie.
    2. Du hast mehrere Dataset-Instanzen, und nimmst die Änderung an einem anderen Dataset vor als dem, was zum Schluss abgespeichert werden soll.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Sorry für die ungenauen/falschen Bezeichnungen.
    Ja, rwk ist die aktuelle typisierte Datarow einer gestimmten BindingSource = BS.

    zu 1) ​.AcceptChanges() habe ich rausgeschmissen und siehe da es funktioniert immer noch wie vorher.
    zu 2) ich nehme den korrekte DataSet, aber auch dort ist das Problem, dass ich in der "TextBox" ändere und die Änderungen nicht direkt in das verbundene Element schreibe.

    --> Jetzt funktioniert alles
    Wieder mal DANKE für die Unterstützung und die Tipps!
    :thumbsup:
    Gruß Günter