Konfliktbehandlung Mysql mit Vb.Net

hkProg

Benutzer
Beiträge
21
Zum Thema:
Ich erstelle gerade mit VB 2015 eine kleine Anwendung, in welcher Daten aus einer Mysql-Datenbank
gelesen und bearbeitet werden können. Ich benutze dazu Connector und die Zugriffsobjekte von
MySql.Data.MySqlClient.
Im Moment binde ich die Daten an ein DataGridview, in dem man die Daten anzeigen und auch bearbeiten kann. Über einen Speicherbutton kann ich gemachte Änderungen auch problemlos speichern. Das ist einfach und mit ein paar Befehlen erledigt.
Im Multiuser-Betrieb tauchen hier aber die ersten Probleme auf, nämlich Parallelitätsverletzungen, d.h. Daten wurden seit dem letzten einlesen von einem anderen User ebenfalls verändert..
Mir ist also klar woher sie kommen, jedoch bin ich im Moment am grübeln, wie man das Problem am besten löst.
Die Variante mit dem Speicherbutton änderte ich ab auf automatisches Speichern, sobald eine Zeile geändert und verlassen wurde. Hier tritt der Fehler natürlich auch auf, jedoch vermeide ich das Problem, das ich mehrere Sätze im DataGrid ändere und diese Änderungen durch den Fehler verworfen würden.
Man kann ja auch Optionen setzten, das die Änderungen die Originaldaten ohne Rücksicht auf Verluste überschreiben, was aber auch nicht die optimale Lösung sein kann.

Daher die Frage: Welche Lösungsansätze sollte man anstreben, um diesen Parallelitätsverletzungen effektiv zu begegnen?
 
Werbung:
Du könntest ein SELECT ... FOR UPDATE machen. Der zweite, der kommt, bekommt den Datensatz nicht, sondern muß warten. Um das warten zu verhindern kannst Du mit NOWAIT arbeiten.
 
Danke für die schnelle Antwort, aber hieraus ergibt sich natürlich eine neue Frage, nämlich wo muss dieses Select-Kommando stehen.
Wenn ich es beim Select-Kommando für das Auflisten der Daten setze, würde dies ja bedeuten, dass der erste User, der das Datenformular aufruft, die Sätze für
ein Update abruft und sozusagen für andere User für das Ändern sperrt.
Oder mache ich da einen Denkfehler?
 
In dem Moment, wo Du einen konkreten Datensatz ändern willst. Somit kannst Du N Rows zeigen, aber wenn Du in den Edit-Mode gehst holst diesen einen noch mal und sperrst ihn.
 
Werbung:
Zurück
Oben