/ / Mehrere gespeicherte Proc-Aufruf in. Net unter 1 Transaktion - c #, asp.net, SQL-Server, Transaktionen, transactionscope

Mehrere gespeicherte Proc-Aufruf in. Net unter 1 Transaktion - c #, asp.net, SQL-Server, Transaktionen, transactionscope

Ich habe eine .net-Webseite, in der zwei gespeicherte Procs aufgerufen werden. Beide haben Begin-Commit-Transaktion in SQL Server. Auch ich rufe die zweite proc mehrere Male abhängig von einigen wenn Bedingungen.

Ich möchte diesen ganzen Prozess in einer einzigen Transaktion abwickeln. Ich habe mich umgeschaut und gefunden, dass Sqltransaction und TransactionScope-Clases in C # mir in dieser Situation helfen werden.

Aber ich habe sie nie benutzt, benutze sie immerTransaktion in SQL-Server, und so weiß nicht, ob die Transaktionen in. NET Probleme haben werden, da beide meine gespeicherten Prozesse ihre eigene Begin-Commit-Transaktion in Sql Server haben.

Wenn es Konflikte gibt, gibt es eine Möglichkeit, sie mit einer einzigen Transaktion zum Arbeiten zu bringen?

Antworten:

1 für die Antwort № 1

Ja, es ist möglich, Stored Procs von .Net (z. B. existierende oder ältere) aufzurufen, die das Handbuch verwenden BEGIN TRAN, COMMIT TRAN / ROLLBACKs unter einem .Net TransactionScopeoder wenn Sie die Transaktion von a SqlTransaction. (Auch wenn Sie das Offensichtliche sagen, wenn Sie die Verwendung mehrerer Transaktionstechnologien vermeiden können, tun Sie dies).

Für das "Happy Case" -Szenario wird es passieren, dass die @@TRANCOUNT wird erhöht, wenn die SPROC Transaktionen werden aufgerufen (genauso wie verschachtelte Transaktionen in SqlServer). Transaktionen werden nur dann ausgeführt, wenn @@TRANCOUNT erreicht nach dem äußersten Commit der Verbindung den Wert Null. d.h. inner commits wird einfach abnehmen @@TRANCOUNT. Beachten Sie jedoch, dass das nicht gilt für ROLLBACKS - es sei denn du benutzt SAVEPOINTSBei jedem Rollback wird die gesamte Transaktion zurückgesetzt. Sie müssen sehr vorsichtig sein, wenn Sie zusammenpassen @@TRANCOUNTs.

Sie klingen ein bisschen unentschlossen TransactionScope vs SqlTransaction. TransactionScope ist vielseitiger, da es sowohl einphasige als auch verteilte Transaktionen (unter Verwendung von DTC). Wenn Sie jedoch nur die Transaktion auf einer einzigen Verbindung, derselben Datenbank, koordinieren müssen, dann SqlTransaction wäre auch in Ordnung.