In der heutigen Anwendungsentwicklung ist die Gewährleistung der Datenintegrität von größter Bedeutung. Dies gilt besonders in Umgebungen, in denen mehrere Datenbankoperationen durchgeführt werden, die als eine einzige Einheit behandelt werden müssen. Eine Lösung für dieses Problem bietet die .NET-Bibliothek mit der Klasse System.Transactions.TransactionScope
. Diese Klasse ermöglicht es Entwicklern, Transaktionen einfach und effektiv zu verwalten, ohne tief in die Details der Transaktionsprotokollierung eintauchen zu müssen. Dieser Artikel gibt eine Einführung in TransactionScope
, erklärt die Durchführung von Transaktionen mit Codebeispielen und diskutiert die Vor- und Nachteile der Nutzung.
Hier ist ein einfaches Codebeispiel, wie TransactionScope
verwendet wird:
1using System;
2using System.Transactions;
3using System.Data.SqlClient;
4
5namespace ConsoleAppFachartikel
6{
7 public class TransactionScopeExample
8 {
9 public void DoTransaction()
10 {
11 // Datenbank Connectionstrings
12 string connectionString1 = "your_connection_string_1";
13 string connectionString2 = "your_connection_string_2";
14
15 // Beginn eines TransactionsScopes
16 using (TransactionScope scope = new TransactionScope())
17 {
18 try
19 {
20 // Inhalt der Transaktion
21 using (SqlConnection connection1 = new SqlConnection(connectionString1))
22 {
23 connection1.Open();
24 SqlCommand command1 = connection1.CreateCommand();
25 command1.CommandText = "INSERT INTO Table1 (Column1) VALUES ('Value1')";
26 command1.ExecuteNonQuery();
27 }
28
29 using (SqlConnection connection2 = new SqlConnection(connectionString2))
30 {
31 connection2.Open();
32 SqlCommand command2 = connection2.CreateCommand();
33 command2.CommandText = "INSERT INTO Table2 (Column2) VALUES ('Value2')";
34 command2.ExecuteNonQuery();
35 }
36
37 // TransactionScope beenden
38 scope.Complete();
39 }
40 catch (Exception ex)
41 {
42 // Exception abfangen und Transaktion zurücksetzen
43 Console.WriteLine("An error occurred: " + ex.Message);
44 }
45 }
46 }
47 }
48}
Der TransactionScope
wird mit einem using
-Block initialisiert, wodurch sichergestellt wird, dass Dispose
aufgerufen wird, sobald der Block verlassen wird.
Innerhalb des using
-Blocks werden mehrere Datenbankoperationen durchgeführt. In diesem Fall werden zwei Inserts in zwei verschiedenen Datenbanken ausgeführt.
Wenn eine Ausnahme auftritt, wird die Transaktion automatisch zurückgesetzt.
Die Methode scope.Complete()
wird aufgerufen, um die Transaktion zu bestätigen. Sollte die Methode Complete()
nicht aufgerufen werden, wird die Transaktion beim Verlassen des using
-Blocks automatisch zurückgesetzt.
Die Nutzung von System.Transactions.TransactionScope
bietet eine leistungsstarke und flexible Möglichkeit, Transaktionen in .NET-Anwendungen zu verwalten. Die Vorteile liegen in der einfachen Handhabung und der Fähigkeit, mehrere Datenbankoperationen in einer einzigen Transaktion zu bündeln, was die Datenintegrität sicherstellt.
TransactionScope
erleichtert die Verwaltung von Transaktionen, indem es eine intuitive API bereitstellt.Insgesamt ist die Verwendung von TransactionScope
in Szenarien, die eine hohe Datenintegrität erfordern und mehrere Operationen als eine Einheit behandeln müssen, sehr sinnvoll. Die Vorteile überwiegen in den meisten Fällen die Nachteile, insbesondere in Anwendungen, die Zuverlässigkeit und Konsistenz priorisieren, weshalb TransactionScope
insgesamt empfohlen wird.
Unser Geschäftsführer Tibor Csizmadia und unser Kundenbetreuer Jens Walter stehen Ihnen persönlich zur Verfügung. Profitieren Sie von unserer langjährigen Erfahrung und erhalten Sie eine kompetente Erstberatung in einem unverbindlichen Austausch.