Transaction im CommandText oder im .NET Code?

07/07/2009 - 21:22 von Lutz Elßner | Report spam
In gespeicherten Prozeduren schreibe ich
BEGIN TRANSACTION;
COMMIT TRANSACTION;

Nun kann ich ja den "String" aus so einer Prozedur im .NET Code als SqlCommand laufen lassen. (Auf einem anderen Server.)

Und die .NET SqlConnection kann eine eigene Transaction machen.

Ist es ein Unterschied wo die Transaction steht, und was ist besser?

Lutz
 

Lesen sie die antworten

#1 Elmar Boye
08/07/2009 - 09:49 | Warnen spam
Hallo Lutz,

Lutz Elßner schrieb:
In gespeicherten Prozeduren schreibe ich
BEGIN TRANSACTION;
COMMIT TRANSACTION;

Nun kann ich ja den "String" aus so einer Prozedur im .NET Code als SqlCommand laufen lassen.
(Auf einem anderen Server.)

Und die .NET SqlConnection kann eine eigene Transaction machen.



Zunàchst zu .NET:
Eine .NET SqlTransaction kapselt die Befehle BEGIN TRAN, COMMIT und ROLLBACK.
Sie macht also nichts besonderes.

Anders wàre da <URL:http://msdn.microsoft.com/de-de/lib...n.aspx>
denn damit sind verteilte Transaktionen möglich, die sich nicht nur
auf die eine Sitzung beziehen müssen.

Ist es ein Unterschied wo die Transaction steht, und was ist besser?



Das über die Frage hinaus, welche Befehle man verwendet.

Wenn Du in einer Prozedur sicherstellen willst, das eine Anzahl von
Befehlen als Einheit verarbeitet werden sollen, so solltest Du die
durch einen Transaktionsblock dort sicherstellen, anstatt darauf zu
vertrauen, dass die aufrufende Anwendung das schon tun wird.

Denn ansonsten erhàlst Du im Fehlerfalle unterschiedliche Ergebnisse.

Für Prozeduren, die Transaktionen benötigen, bietet sich eine kooperative
Transaktionssteuerung an, die eine Transaktion nur eröffnet, wenn die
aufrufende Anwendung noch keine erstellt hat. Das sieht dann in etwa
wie folgt aus:

DECLARE @tcount int;

SET @tcount = @@TRANCOUNT;
IF @tcount = 0
BEGIN TRAN;


IF @@ERROR <> 0
BEGIN
IF @@TRANCOUNT > 0 ROLLBACK TRAN;
RETURN ;
END

IF @@tcount = 0
COMMIT;

Mehr dazu findest Du in Erland Sommarskogs Artikeln:
<URL:http://www.sommarskog.se/error-handling-I.html>
<URL:http://www.sommarskog.se/error-hand...I.html>

Gruß Elmar

Ähnliche fragen