Hallo! > wir ben�tigen also eine m�glichkeit, einen datensatz - indem x-beliebig > viele daten die > einander untergeordnet sind - einzeln zu sperren. > unsere idee: > - einen datensatz einzeln zu sperren > - serverseitig in der global.asa ein array zu definieren, dass die einzelnen > id's, die gerade verwendet wird, beinhaltet.
Mit ADO.NET entf�llt das automatische Table- oder Record-Locking sowieso. Schon seit geraumer Zeit implementieren viele Datenbankprofis das "Logical-Data-Locking", allerdings in der Datenbank und nicht au�erhalb. Gerade im Web kommt man meines Erachtens um das "Logical-Record-Locking" nicht herum, da ja zwischen dem Lesen und Zur�ckschreiben eines Datensatzes die Verbindung zur Datenbank in der Regel gekappt wird, so dass das Sperren mit herk�mmlichen Mitteln der Datenbank fatale Folgen haben kann. Beim Logical-Record-Locking wird eine Datenmenge gelesen und gleichzeitig eine UserId und ein TimeStamp in die Datenbank geschrieben, um anzuzeigen, dass der Datensatz gerade bearbeitet wird. Man kann diese Felder nun in jede Tabelle einf�gen. Ich verwende aber eine separate Tabelle mit folgenden Feldern: Id Tabelle (varchar*50) UserId (int*4) oder "SessionId" (int*4) RecordId(Int*4) Request (datetime*8) Sobald ein Bearbeitungsprugramm einen Datensatz liest, wird in der Locking-Tabelle gepr�ft, ob der Datensatz (Tabelle, RecordId) gerade bearbeitet wird. Andernfalls wird ein neuer Datensatz in der Locking-Tabelle angelegt. Die Bearbeitung wird auch freigegeben, wenn das "Locking" l�nger als 20 Minuten zur�ckliegt, oder wenn man selber den Datensatz vorher gesperrt hatte. Die Locking-Tabelle enth�lt in der Regel maximal einen Datensatz pro User. Die Vorteile von "Logical-Record-Locking" liegen auf der Hand: - Man entscheidet immer in der Anwendung, wann eine Datengruppe "gelockt" wird. - Abgebrochene Sessions/Transaktionen brauchen keine "Nachbearbeitung", weil die Sperre �ber die Zeit automatisch aufgel�st wird. - Hierarchisches Locking ist besonders einfach: Es braucht nur der �bergeordnete Datensatz gesperrt werden. - Man kann zentral Sperren aufheben: "delete from lockLogical where UserId = ..." - Wenn zwei Benutzer gleichzeitig einen Datenmenge bearbeiten wollen, kann man auch Auskunft geben, mit wem man sich ggf. abstimmen kann. - ... In Access verwende ich eine zentrale Funktion f�r das "Locking", im SQl Server nutze ich Stored Procedures. Insgesamt habe ich es noch nie bereut, auf das "regul�re" Daten-Locking einer Datenbank zu verzichten. Freundliche Gr��e Joachim van de Bruck | [aspdedatabase] als [email protected] subscribed | http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv | Sie k�nnen sich unter folgender URL an- und abmelden: | http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp
