Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Konfliktbehandlung Mysql mit Vb.Net

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von hkProg, 11 Mai 2016.

  1. hkProg

    hkProg Benutzer

    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?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. hkProg

    hkProg Benutzer

    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?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  5. hkProg

    hkProg Benutzer

    Alles klar, das macht Sinn!
    Vielen Dank für deine Hilfe
     
  6. Walter

    Walter Administrator Mitarbeiter

    Der Vollständigkeit halber sollte man erwähnen, dass es auch noch andere Methoden gibt, vor allem das Timestamp-Verfahren das ohne Sperren auskommt:
    Zeitstempelverfahren – Wikipedia
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden