CSharp Datensatz sperren
Hi NG,
wie kann ich mit C#.net 2010 Express einen Datensatz aus einer Tabelle (Access, MS-Sql Server) sperren, damit kein anderer Benutzer die Daten überschreiben kann?
MfG
Andy
MfG
Andy
Please also mark the comments that contributed to the solution of the article
Content-Key: 157089
Url: https://administrator.de/contentid/157089
Printed on: April 20, 2024 at 02:04 o'clock
4 Comments
Latest comment
Moin,
in der Regel ist das die Aufgabe des DBMS und nicht die Aufgabe der Programmierung ;).
Ich weiss z.B. bei MySQL das man sowas natürlich per "lock table" hinbekommen könnte -> wobei die Frage ist: Sollen die Daten nicht verändert werden können oder auch gar nicht angezeigt werden können? Was ist wenn dein Programm mal kurz auf Urlaub geht? Oder wenn z.B. der Sachbearbeiter mal eben den Datensatz öffnet und erstmal ne gute alte Hawanna rauchen geht? (das dauert ja dann schonmal 30 minuten )
Schönen Gruß
Mike
in der Regel ist das die Aufgabe des DBMS und nicht die Aufgabe der Programmierung ;).
Ich weiss z.B. bei MySQL das man sowas natürlich per "lock table" hinbekommen könnte -> wobei die Frage ist: Sollen die Daten nicht verändert werden können oder auch gar nicht angezeigt werden können? Was ist wenn dein Programm mal kurz auf Urlaub geht? Oder wenn z.B. der Sachbearbeiter mal eben den Datensatz öffnet und erstmal ne gute alte Hawanna rauchen geht? (das dauert ja dann schonmal 30 minuten )
Schönen Gruß
Mike
Hallo Andy,
wenn Du die Isolationsebene der Transaktion auf Serializable setzt, werden die einzelnen Abfragen nacheinander abgearbeitet. Weiß aber nicht, ob das mit Access geht (eher nicht, da keine Transaktionen). Dafür mußt Du das in der SqlConnection.BeginTransaction-Methode der SQLConnection-Klasse einstellen. Schau mal im Internet nach den Schlagworten, um Beispiele zu finden. Andere Möglichkeiten fallen mir nicht ein.
Grüße perseues
wenn Du die Isolationsebene der Transaktion auf Serializable setzt, werden die einzelnen Abfragen nacheinander abgearbeitet. Weiß aber nicht, ob das mit Access geht (eher nicht, da keine Transaktionen). Dafür mußt Du das in der SqlConnection.BeginTransaction-Methode der SQLConnection-Klasse einstellen. Schau mal im Internet nach den Schlagworten, um Beispiele zu finden. Andere Möglichkeiten fallen mir nicht ein.
Grüße perseues
Hi !
Wie mike ja schon schreibt, musst Du das normalerweise nicht selbst programmieren, ausser Du verwendest eine uralte Datenbankengine aus den 70ern oder 80ern, da musste man sich noch selbst um das Locking kümmern.
Meine Empfehlung: Gleich einen richtigen SQL-Datenbankserver verwenden und Access (zumindest als Datenbankengine) mal ganz locker links liegen lassen...Wenn dein Projekt nix kosten darf, dann nimm eine Opensource Variante, auch dort gibt es transaktionssichere Datenbanken.
mrtux
Zitat von @AndyAh:
es soll der Datensatz im Netzwerk (Multiuserumgebung) gesperrt werden, um zu verhindern, das ein anderer die Daten
es soll der Datensatz im Netzwerk (Multiuserumgebung) gesperrt werden, um zu verhindern, das ein anderer die Daten
Wie mike ja schon schreibt, musst Du das normalerweise nicht selbst programmieren, ausser Du verwendest eine uralte Datenbankengine aus den 70ern oder 80ern, da musste man sich noch selbst um das Locking kümmern.
Meine Empfehlung: Gleich einen richtigen SQL-Datenbankserver verwenden und Access (zumindest als Datenbankengine) mal ganz locker links liegen lassen...Wenn dein Projekt nix kosten darf, dann nimm eine Opensource Variante, auch dort gibt es transaktionssichere Datenbanken.
mrtux