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

Antwort per Email an