Announcement

Collapse
No announcement yet.

WEB-Anwendung und SQL-Datenbank verhindern von gemeisamen Zugriffen auf einen Datensa

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • WEB-Anwendung und SQL-Datenbank verhindern von gemeisamen Zugriffen auf einen Datensa

    Hallo Zusammen,
    ich fange gerade an mich mit WEB-Entwicklung und SQL-Datenbanken zu beschäftigen.
    Ich schaffe es bisher problemlos auf meine DB zuzugreifen, Daten zu suchen, anzeigen und ändern.
    Was passiert, wenn 2 User auf ein und den selben Datensatz in meiner DB zugreifen wollen und diesen dann auch ändern? Die Sessions der beiden User wissen ja nichts voneinander. Gibt es eine Möglichkeit den angezeigten Datensatz im Moment der Speicherung zu blockieren und somit auch die Möglichkeit eines Warnhinweises, dass der Datensatz zur Zeit bearbeitet wird vom User xy?
    Ich hoffe, dass meine Frage nicht schon 1000 mal gestellt wurde, ich habe bei der Suche hier im Forum nichts entsprechendes Gefunden. Wenn es schon Antworten gibt, reicht mir sicher auch ein Verweis.
    Vielen Dank!
    jduecker

  • #2
    Hi,

    mit was entwickelst du? Net 2.0? Dann müsste es doch so ablaufen.

    Verbindung zur DB wird aufgebaut (Verbindung aus ConnectionPool geholt) -> Dataset mit Daten gefüllt -> Verbindung wird geschlossen (zurück in den Pool gelegt) -> Dataset wird an Client übertragen.

    Damit steht jedem Client in Form des Dataset eine lokale Kopie zur Verfügung an der Änderungen vorgenommen werden können. Wenn in dem Dataset bzw. in den Tabellen im Dataset z.B. ne Spalte Timestamp enthalten ist, dann kann auch beim speichern der Daten (Dataset an Server schicken) auf bereits durch andere Anwender vorgenommene Änderungne reagiert werden.

    Comment


    • #3
      Hallo Henry und Danke für Deine Antwort.
      Originally posted by Henry Krick View Post
      mit was entwickelst du? Net 2.0?
      Ja, ich "versuche" .net 2.0. Bin halt (noch) nicht sehr geübt!

      Originally posted by Henry Krick View Post
      Dann müsste es doch so ablaufen.
      Verbindung zur DB wird aufgebaut (Verbindung aus ConnectionPool geholt) -> Dataset mit Daten gefüllt -> Verbindung wird geschlossen (zurück in den Pool gelegt) -> Dataset wird an Client übertragen.
      Im Prinzip mache ich das auch so. Aber wenn ich mir eine 2. Umgebung öffne (also ein 2. Mal mein Prog aufrufe) wird die Änderung übernommen, die zuletzt ausgelöst wurde. Was ich aber möchte, ist, dass ich beide (oder auch nur einen) User warnen kann, wenn SEINE Änderungen verworfen wurden bzw. SEINE Ausgangsdaten nicht mehr aktuell waren.
      (Bsp: es wird ein Datum hinterlegt, an dem eine bestimmte Aktion fertig sein soll. Wenn User 1 den 4.4. auf den 5.5. ändert und speichert und User 2 den 4.4. auf den 6.6. ändert, ohne Hinweis, dass User 1 gerade das Datum geändert hat ein wenig später ändert, kann das nicht wirklich gut sein)
      Es gibt da sicher einen schlauen Weg, den ich nur noch nicht kenne.
      Vielen Dank schon mal!
      jduecker

      Comment


      • #4
        Hi,

        in einem "normalen" Programm würde eine DBConcurrencyException ausgelöst werden, wenn der Fall eintritt das ein User Daten in der DB aktualisiert hatte, während ein anderer noch mit "alten" Daten arbeitete. Ein Webservice kann aber nur eine SoapException zum Clienten transportieren. Das heißt konkret: Innerhalb deines Webservice wird ein DBConcurrencyException ausgelöst. Diese musst du abfangen und in eine SoapException verpacken.

        Fehlerbehandlung bei Webdiensten - SoapException

        Comment


        • #5
          Hallo Henry,
          vielen Dank für den Hinweis mit SOAP, ist für mich als Neuling wichtig!
          Also, mit normalem Programm ist meines, so scheint es, nicht gemeint. Habe mal in diversen anderen Foren rumgesucht und rausgefunden, dass ich in SQL eine komplette Niete bin. Dort gibt es den transaction-Befehl, der mir eine Meldung erzeugt, dass der 2. User nicht speichern kann, weil eine Änderung des Datensatzes vorliegt. Den kann ich dann mit TRY und CATCH abfangen.
          Also Problem gelöst. Vielen Dank!
          jduecker

          Comment

          Working...
          X