System.Transactions.TransactionScope

TransactionScope: Parallele DB-Transaktionen in .NET einfach steuern
Thomas R. | Softwareentwickler
10/2024

Einleitung in System.Transactions.TransactionScope

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.

Durchführung

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}

Erstellen der Transaktionsumgebung

Der TransactionScope wird mit einem using-Block initialisiert, wodurch sichergestellt wird, dass Dispose aufgerufen wird, sobald der Block verlassen wird.

Durchführung von Operationen

Innerhalb des using-Blocks werden mehrere Datenbankoperationen durchgeführt. In diesem Fall werden zwei Inserts in zwei verschiedenen Datenbanken ausgeführt.

Fehlerbehandlung

Wenn eine Ausnahme auftritt, wird die Transaktion automatisch zurückgesetzt.

Abschluss der Transaktion

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.

Abschluss/ Zusammenfassung

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.

Vorteile von TransactionScope

  • TransactionScope erleichtert die Verwaltung von Transaktionen, indem es eine intuitive API bereitstellt.
  • Es unterstützt mehrere Ressourcen innerhalb einer einzigen Transaktion.
  • Bei Ausnahmen wird die Transaktion automatisch zurückgesetzt, was die Fehlerbehandlung erleichtert.

Nachteile und Überlegungen

  • Transaktionen haben einen gewissen Overhead, der die Performance beeinflussen kann.
  • Bei Transaktionen, die mehrere Ressourcen über mehrere Netzwerke hinweg umfassen, kann die Komplexität und die Fehleranfälligkeit steigen.

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.

Mehr zum Thema

Pfeil nach rechts (Verlinkung)
.NET 8 API-Versionierung: RESTful Design und URL-Versionierung für APIs
01/2025

.NET 8 API Versioning | RESTful API Management Guide

Pfeil nach rechts (Verlinkung)
RegEx für Entwickler: Patterns, Validierung & Cheat Sheet für .NET
10/2024

RegEx Tutorial | Regular Expressions Cheat Sheet Guide

Pfeil nach rechts (Verlinkung)
C# async/await: Parallele Tasks & Performance-Optimierung
10/2024

C# async await Tutorial | Asynchrone Programmierung Guide

Pfeil nach rechts (Verlinkung)
Visual Studio Individual Accounts: Login, Benutzerverwaltung & Authentifizierung
10/2024

Visual Studio Authentication | Individual Accounts Setup

Pfeil nach rechts (Verlinkung)

Gemeinsam Großes schaffen

Devware GmbH verpflichtet sich, Ihre Privatsphäre zu schützen. Wir benötigen Ihre Kontaktinformationen, um Sie bezüglich unserer Produkte und Dienstleistungen zu kontaktieren. Mit Klick auf Absenden geben Sie sich damit einverstanden. Weitere Informationen finden Sie unter Datenschutz.
Vielen Dank für Ihr Vertrauen.
Unser Team prüft Ihre Anfrage sorgfältig und meldet sich in der Regel innerhalb von 48 Stunden bei Ihnen zurück.
Falls es besonders eilig ist, erreichen Sie uns auch telefonisch:
+ 49 (0) 202 478 269 0.
Da ist etwas schief gegangen beim Absenden des Formulars.