Verhinderung von gleichzeitigen Zugriff auf SQL-Datenbank

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von tomvb.

    Verhinderung von gleichzeitigen Zugriff auf SQL-Datenbank

    Rechnersystem Peer to Peer Verbindung.
    Beide Rechner haben das gleiche Programm (A+B), die Datenbank(Sql Server 2008 Express liegt auf Rechner A). Der Datenbankzugriff
    von beiden Rechnern auf die Datenbank funktioniert normalerweise ohne Probleme. Es gab aber den Zufall das beide User den Update
    Befehl einer Aktion genau zeitgleich starteten. User A hatte keine Probleme, bei B flogen alle vorher im Form eingetragenen Datensätze raus.
    Wie kann man das vermeiden. Habe 2 Möglichkeiten in Betracht gezogen, weiß aber nicht ob das funktioniert.
    1.
    Public Sub OpenConnection(ConnStr As String)
    conn = New SqlConnection()
    conn.ConnectionString = ConnStr
    If conn.State = ConnectionState.Open Then
    Exit Sub
    Else
    conn.OpenAsync()
    End If

    End Sub

    Die 1. ob ich einfachen den ConnState abfrage
    Die 2. ob ich das Update über ein OpenAsync laufen lassen sollte.
    Hier der einfache Verbindungsstring
    Public connStr As String = "Data Source=KL\SQLEXPRESS;Initial Catalog=xxxxxdb01;Integrated Security=True
    Dieses Problem ist bekannt unter dem Namen "Datenbank-Concurrency", und da gibts kein Patent-Rezept für, sondern man muss im Einzelfall konzipieren und umsetzen, wie die Anwendung damit umgehen soll.

    Also konzipiere: Was soll vonstatten gehen, wenn User A einen bestimmten Datensatz geladen hat, um ihn zu editieren?
    Soll währenddessen User B diesen Datensatz laden dürfen?
    Soll währenddessen User B diesen Datensatz auch abspeichern dürfen?

    Oder was soll passieren?
    Du kannst dir eine extra Tabelle erstellen, in der du für jede Tabelle den Namen der Tabelle und ein Feld für ein Kennezeichen hast. Wenn du auf eine Tabelle zugreifen willst:
    1.) Schau in der anderen Tabelle, ob die Tabelle, die du schreiben willst, grad "reserviert" wurde. Wenn ja, dann verweigere dem User den Zugriff,
    2.) sonst "reserviere" die Tabelle. Dazu schreib in das Kennzeichen der Tabelle, die du grad beschreibenen willst, ein "X" oder was auch immer
    3.) Mach dein Insert/Delete/...
    4.) Nimm das Kennzeichen wieder raus.
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell