Wo ist der beste Ort, um Transaktionen in der gespeicherten Prozedur oder in der Anwendung zu behandeln?

8

Wenn meine C # .net-Anwendung Datensätze in mehr als einer Tabelle aktualisiert, verwende ich Transaktionen. Wenn also irgendetwas während der Transaktion fehlschlägt, kann ich ein Rollback durchführen.

Welche ist eine bessere Praxis?

- Verwenden Sie die gespeicherte Prozedur mit BEGIN TRANSACTION / ROLLBACK / COMMIT TRANSACTION; Verwenden Sie TransactionScope in der Anwendung wie folgt:

%Vor%     
Leo Nix 03.04.2009, 21:18
quelle

6 Antworten

4

Dies ist kein Problem mit der Geschäftslogik, es ist ein Problem mit der Datenintegrität und ich finde, dass das in der gespeicherten Prozedur in Ordnung ist. Ich möchte die Transaktionslogik so nah wie möglich an den Operationen halten, um deren Dauer zu verkürzen.

    
Mufaka 03.04.2009, 22:23
quelle
3

TransactionScope ist eine wirklich nette Möglichkeit, Transaktionen im Code zu verwalten. Sie können Transaktionscode über mehrere Methoden verschachteln und bei Bedarf automatisch auf den verteilten Modus skalieren.

Ich bevorzuge es, TransactionScope über gespeicherte Proc-Transaktionen zu verwenden, weil Sie dadurch viel mehr Kontrolle über den Code erhalten.

    
Andy White 03.04.2009 21:22
quelle
1

Oder Sie können es in beiden tun. Überprüfen Sie den Link: Ссылка

    
Mike Cole 03.04.2009 21:22
quelle
1

Wenn Ihre Transaktion zu einer Datenbank geht, dann ist es besser, eine Transaktion in einer gespeicherten Prozedur durchzuführen. Die andere Möglichkeit kann nur durch logistische Probleme verursacht werden (DBA mag Sie nicht, oder er ist im Urlaub). Wenn Sie verschiedene Transaktionsquellen (SQL Server und Oracle) in einer Transaktion aufrufen, gibt es keine andere Möglichkeit als die Transaktion im Code.

    
AlexT 03.04.2009 22:32
quelle
1

Ich würde dringend empfehlen, eine Prozedur für eine Seite einzurichten und alle SQL-Aktionen dort zu verwalten. Wenn auf der Seite mehrere Aufgaben ausgeführt werden müssen, die mehrere Prozeduren erfordern, müssen Sie nur eine Prozedur verwalten, um die anderen Prozeduren zu verwalten. Ihre Vorgehensweise kann bei Bedarf immer mehrere Recordsets zurückgeben.

  • Ihre Seite wird schneller ausgeführt - nicht viele Daten gehen hin und her, nur ein Zug. Der gesamte Code auf der SQL ist bereits mit Ausführungsplänen kompiliert.
  • Sie werden es können Behandle deine Fehler viel mehr effizient - an einer Stelle im Gegensatz an zwei Orten - mit zwei getrennte Systeme, um zu entscheiden, ob es ist Kritisch genug, um zu versagen Fehler hin und her zu pflegen Ihre Datenintegrität.
  • Sie minimieren Ihre Fehlerquellen. Wenn die Transaktion gut läuft, aber der Webserver Schluckauf, der SQL Server wartet auf einen Antwort.
  • Sie sparen viel Zeit bei der Fehlersuche und Fehlerbehebung.
  • Es wird helfen, Ihren Code auf dem SQL-Server zu modularisieren. Sie können Sprocs für die Ausführung ähnlicher Aufgaben wiederverwenden und mit einem flexibleren skalierbaren, robusten System enden. HTH
Praesagus 03.04.2009 23:05
quelle
1

Hier sind meine 2 einfachen Regeln für die Verwendung von Transaktionen:

  • Wenn die Prozedur mehr als eine Datenänderungsanweisung enthält, enthält sie eine Transaktion.
  • Wenn die Anwendung mehr als eine gespeicherte Prozedur aufruft, die Daten ändert, enthält sie eine Transaktion.
KM. 06.04.2009 12:55
quelle

Tags und Links