Freigeben über


SqlTransaction.Commit-Methode

Führt einen Commit der Datenbanktransaktion aus.

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

Syntax

'Declaration
Public Overrides Sub Commit
'Usage
Dim instance As SqlTransaction

instance.Commit
public override void Commit ()
public:
virtual void Commit () override
public void Commit ()
public override function Commit ()

Ausnahmen

Ausnahmetyp Bedingung

Exception

Fehler beim Ausführen eines Commits der Transaktion.

InvalidOperationException

Es wurde bereits ein Commit bzw. ein Rollback für die Transaktion ausgeführt.

- oder -

Die Verbindung ist unterbrochen.

Hinweise

Die Commit-Methode entspricht der Transact-SQL-Anweisung COMMIT TRANSACTION. Nach einem Commit können Sie kein Rollback mehr für diese Transaktion ausführen, da alle Änderungen fester Bestandteil der Datenbank geworden sind. Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation.

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 Commit, BeginTransaction 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);
            }
        }
    }
}

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-Klasse
SqlTransaction-Member
System.Data.SqlClient-Namespace

Weitere Ressourcen

Durchführen einer Transaktion