Freigeben über


Transaktion (ODBC)

Dieses Thema bezieht sich auf die MFC-ODBC-Klassen.

Eine Transaktion ist eine Methode, um eine Reihe von Aktualisierungen an einer Datenquelle zu gruppieren oder in einem Batch zusammenzufassen, sodass für alle gleichzeitig ein Commit ausgeführt werden kann oder kein Commit erfolgt, falls ein Rollback für die Transaktion ausgeführt wird. Falls Sie keine Transaktion verwenden, werden Änderungen an der Datenquelle automatisch durchgeführt, nicht erst nach einer Bestätigung.

Tipp

Nicht alle ODBC-Datenbanktreiber unterstützen Transaktionen. Rufen Sie die CanTransact-Memberfunktion eines CDatabase-Objekts oder CRecordset-Objekts auf, um zu bestimmen, ob der Treiber Transaktionen für eine bestimmte Datenbank unterstützt. Beachten Sie, dass CanTransact Sie nicht informiert, ob die Datenquelle eine vollständige Transaktionsunterstützung bietet. Sie müssen nach CommitTrans und Rollback zusätzlich CDatabase::GetCursorCommitBehavior und CDatabase::GetCursorRollbackBehavior aufrufen, um die Auswirkung der Transaktion auf das geöffnete CRecordset-Objekt zu überprüfen.

Aufrufe der AddNew-Memberfunktion und Edit-Memberfunktion eines CRecordset-Objekts wirken sich sofort auf die Datenquelle aus, sobald Sie Update aufrufen. Delete-Aufrufe wirken sich ebenfalls sofort aus. Wenn Sie im Gegensatz dazu eine Transaktion verwenden, die aus mehreren Aufrufen von AddNew, Edit, Update und Delete besteht, werden diese Operationen erst dann ausgeführt, wenn Sie explizit CommitTrans aufrufen. Indem Sie eine Transaktion einrichten, können Sie eine Reihe solcher Aufrufe ausführen und sich trotzdem die Möglichkeit vorbehalten, diese zurückzusetzen. Falls eine wichtige Ressource nicht verfügbar ist oder eine andere Bedingung verhindert, dass die vollständige Transaktion abgeschlossen werden kann, können Sie die Transaktion zurücksetzen, statt sie zu bestätigen. In diesem Fall wirkt sich keine der in der Transaktion ausgeführten Änderungen auf die Datenquelle aus.

Tipp

Zurzeit unterstützt die CRecordset-Klasse keine Aktualisierungen der Datenquelle, wenn Sie das gesammelte Abrufen von Zeilen implementiert haben. Dies bedeutet, dass Sie AddNew, Edit, Delete oder Update nicht aufrufen können. Sie können jedoch eigene Funktionen erstellen, um Aktualisierungen durchzuführen und die Funktionen in Transaktionen aufzurufen. Weitere Informationen über das gesammelte Abrufen von Zeilen finden Sie unter Recordset: Abrufen von Datensätzen in einer Sammeloperation (ODBC).

Tipp

Neben dem Recordset wirken sich Transaktionen auch auf SQL-Anweisungen aus, die Sie direkt ausführen, sofern Sie eine mit einem CDatabase-Objekt verknüpfte ODBC-HDBC oder ein auf dieser HDBC basiertes ODBC-HSTMT verwenden.

Transaktionen sind besonders nützlich, wenn mehrere Datensätze gleichzeitig zu aktualisieren sind. In diesem Fall sollten Sie halbfertige Transaktionen vermeiden, wie sie z. B. auftreten, wenn eine Ausnahme vor Durchführung der letzten Aktualisierung ausgelöst wird. Die Gruppierung solcher Aktualisierungen zu einer Transaktion gibt Ihnen die Möglichkeit, die Änderungen rückgängig zu machen (zurückzusetzen) und die Datensätze in den Zustand zu versetzen, in dem sie sich vor Beginn der Transaktion befanden. Wenn eine Bank z. B. Geld von Konto A auf Konto B transferiert, müssen sowohl das Abheben von Konto A als auch die Einzahlung auf Konto B erfolgreich durchgeführt werden, damit die Überweisung fehlerfrei erfolgt. Andernfalls schlägt die gesamte Transaktion fehl.

In den Datenbankklassen führen Sie Transaktionen über CDatabase-Objekte aus. Ein CDatabase-Objekt repräsentiert eine Verbindung zu einer Datenquelle. Eine oder mehrere mit diesem CDatabase-Objekt verknüpfte Recordsets bearbeiten Datenbanktabellen mithilfe von Recordset-Memberfunktionen.

Tipp

Es wird nur eine Transaktionsebene unterstützt. Sie können Transaktionen nicht schachteln. Eine Transaktion kann auch nicht mehrere Datenbankobjekte umfassen.

Die folgenden Themen enthalten weitere Informationen über die Ausführung von Transaktionen:

Siehe auch

Konzepte

Open Database Connectivity (ODBC)