Freigeben über


SqlTransaction-Klasse

Stellt eine Transact-SQL-Transaktion dar, die in einer SQL Server-Datenbank ausgeführt werden soll. Diese Klasse kann nicht geerbt werden.

Namespace: System.Data.SqlClient
Assembly: System.Data (in system.data.dll)

Syntax

'Declaration
Public NotInheritable Class SqlTransaction
    Inherits DbTransaction
'Usage
Dim instance As SqlTransaction
public sealed class SqlTransaction : DbTransaction
public ref class SqlTransaction sealed : public DbTransaction
public final class SqlTransaction extends DbTransaction
public final class SqlTransaction extends DbTransaction

Hinweise

Die Anwendung erstellt durch Aufrufen von BeginTransaction für das SqlConnection-Objekt ein SqlTransaction-Objekt. Alle nachfolgenden Operationen, die der Transaktion zugeordnet sind (z. B. ein Commit oder Abbruch der Transaktion), werden für das SqlTransaction-Objekt ausgeführt.

Hinweis

Die Try/Catch-Ausnahmebehandlung sollte immer verwendet werden, wenn Sie für eine SqlTransaction ein Commit oder ein Rollback durchführen. Sowohl Commit als auch Rollback generieren eine InvalidOperationException, wenn die Verbindung beendet wird oder für die Transaktion auf dem Server bereits ein Rollback durchgeführt wurde.

Weitere Informationen über SQL Server-Transkationen finden Sie in SQL Server 2005 Books Online unter "Explicit Transactions" und "Coding Efficient Transactions" (nur auf Englisch verfügbar).

Beispiel

Im folgenden Beispiel werden eine SqlConnection und eine SqlTransaction erstellt. Darüber hinaus wird die Verwendung der Methoden BeginTransaction, Commit und Rollback veranschaulicht. Für die Transaktion wird im Falle eines Fehlers ein Rollback durchgeführt. Die Try/Catch-Fehlerbehandlung wird zum Behandeln aller Fehler bei einem Commit oder Rollback der Transaktion verwendet.

Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
        connection.Open()

        Dim command As SqlCommand = connection.CreateCommand()
        Dim transaction As SqlTransaction

        ' Start a local transaction
        transaction = connection.BeginTransaction("SampleTransaction")

        ' Must assign both transaction object and connection
        ' to Command object for a pending local transaction.
        command.Connection = connection
        command.Transaction = transaction

        Try
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
            command.ExecuteNonQuery()
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"

            command.ExecuteNonQuery()

            ' Attempt to commit the transaction.
            transaction.Commit()
            Console.WriteLine("Both records are written to database.")

        Catch ex As Exception
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
            Console.WriteLine("  Message: {0}", ex.Message)

            ' Attempt to roll back the transaction.
            Try
                transaction.Rollback()

            Catch ex2 As Exception
                ' This catch block will handle any errors that may have occurred
                ' on the server that would cause the rollback to fail, such as
                ' a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
                Console.WriteLine("  Message: {0}", ex2.Message)
            End Try
        End Try
    End Using
End Sub
private static void ExecuteSqlTransaction(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        SqlCommand command = connection.CreateCommand();
        SqlTransaction transaction;

        // Start a local transaction.
        transaction = connection.BeginTransaction("SampleTransaction");

        // Must assign both transaction object and connection
        // to Command object for a pending local transaction
        command.Connection = connection;
        command.Transaction = transaction;

        try
        {
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
            command.ExecuteNonQuery();
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
            command.ExecuteNonQuery();

            // Attempt to commit the transaction.
            transaction.Commit();
            Console.WriteLine("Both records are written to database.");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
            Console.WriteLine("  Message: {0}", ex.Message);

            // Attempt to roll back the transaction.
            try
            {
                transaction.Rollback();
            }
            catch (Exception ex2)
            {
                // This catch block will handle any errors that may have occurred
                // on the server that would cause the rollback to fail, such as
                // a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                Console.WriteLine("  Message: {0}", ex2.Message);
            }
        }
    }
}

Vererbungshierarchie

System.Object
   System.MarshalByRefObject
     System.Data.Common.DbTransaction
      System.Data.SqlClient.SqlTransaction

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

SqlTransaction-Member
System.Data.SqlClient-Namespace

Weitere Ressourcen

Durchführen einer Transaktion