Announcement

Collapse
No announcement yet.

Was tun bei Verbindungsabbruch?

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

  • Was tun bei Verbindungsabbruch?

    Mir stellt sich derzeit folgende Frage.
    Ich habe ein Programm, welches mit Datenbanken kommuniziert.
    Mittels
    Code:
    sqlCommand.ExecuteReader()
    führe ich einige Anweisungen auf der Datenbank durch.
    Solange die Verbindung da ist klappt alles einwandfrei, aber was passiert wenn diese mal während einer Anfrage zusammenbricht?

    Sprich ich habe die Anfrage gesendet, die DB führt den Befehl aus aber ich bekomme keine Antwort.

    Daraus ergeben sich mir 2 Fragen:

    1. Wie kann ich sowas abfangen? Oder wie geht man damit um?
    2. Wenn ich nun mit der Anfrage Daten auf der DB verändert habe, weiß mein Programm das ja dann nicht.

    Sagen wir mein Programm verbindet sich mit 2 Servern. Gibt einen Befehl der Daten verändert an Server A. Dieser führt ihn aus, kann aber keine Antwort liefern, da die Verbindung weg ist. Mein Programm wird also nie erfahren, dass der Server den Befehl ausgeführt hat und kann somit Server B nichts davon mitteilen.

  • #2
    Bei Statements, die abgesetzt werden, wird im Falle eines Verbindungsabbruchs etc. eine Exception geworfen. Diese kannst du einfach abfragen.

    Was zusammengehörige Aktionen betrifft (die auf einem Server laufen) bieten sich Transaktionen an um sicher zu stellen, dass alles ausgeführt wird, oder nichts. Gegebenenfalls ist ein Rollback zu machen.

    D.h. du solltest in deiner Anwendung immer mitbekommen wenn etwas erfolgreich war oder nicht.
    .NET GUI - DIE Community für GUI-Entwickler

    Living.NET - Blog :: Live Blog :: .NET Casts

    Hol' dir jetzt dein kostenloses .NET BlogBook.

    Comment


    • #3
      Mit der Exception ist schonmal gut, die muss ich dann noch abfangen.

      Aber Transaktionen nutzen mir ja wie du schon sagtest nur bei Aktionen die nur auf einem Server laufen.

      Wenn mein Tool jetzt je eine Verbindung zu Server A und Server B herstellt,
      ich dann mittels einer Transaktion Daten in A änder und praktisch das Ergebnis in B speichern will, kann ich das ja nicht so einfach machen.

      Wann schließe ich die Transaktion ab?
      1.Fall: Transaktion wird commited, danach wird versucht Server B Informationen zu übermitteln (Verbindung weg...)
      2.Fall: Transaktion wird offen gehalten, Informationen in Server B eingetragen und dann versucht die Transaktion zu comitten (Verbindung weg...)
      3.Fall: auch wenn ich auf beiden Servern mit Transaktionen arbeite, wie stelle ich sicher dass entweder beide oder keine ausgeführt werden?

      Ein Beispiel für das Problem (wenn auch kein sinnvolles) ist folgendes:
      Server A hat eine Kundentabelle
      Server B hat eine logTabelle für die Kundentabelle in A

      d.h. jedesmal wenn ein Kunde eingetragen wird,
      soll auch in der logTabelle ein Eintrag gemacht werden.

      Wie stelle ich nun sicher, dass ich in beiden Tabellen die Werte eintrage!?

      Comment


      • #4
        Du willst verteilte Transaktionen nutzen.
        .NET GUI - DIE Community für GUI-Entwickler

        Living.NET - Blog :: Live Blog :: .NET Casts

        Hol' dir jetzt dein kostenloses .NET BlogBook.

        Comment


        • #5
          gibt es sowas und wenn ja wie funktioniert das?

          Comment


          • #6
            Hallo!

            Verteilte Transaktionen: in .net 2.0 mal die "Transaction"-Klasse im Namespace System.Transactions-Namespace anschauen. Die macht sowas automatisch.

            Aber: Die Aufgabe sieht nicht nach einer Transaktion aus sondern nach einer Aufgabe für einen Trigger in der Datenbank.

            mfg
            Thomas

            Comment

            Working...
            X