Transaktion (ODBC)

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

Eine Transaktion ist eine Möglichkeit zum Gruppieren oder Batchen einer Reihe von Aktualisierungen an einer Datenquelle , sodass alle gleichzeitig zugesichert werden oder keine zugesichert werden, wenn Sie die Transaktion zurücksetzen. Wenn Sie keine Transaktion verwenden, werden Änderungen an der Datenquelle automatisch zugesichert, anstatt bei Bedarf zugesichert zu werden.

Hinweis

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

Aufrufe der AddNew Und Edit Memberfunktionen eines CRecordset Objekts wirken sich unmittelbar beim Aufrufen Updateauf die Datenquelle aus. Delete Anrufe werden auch sofort wirksam. Im Gegensatz dazu können Sie eine Transaktion verwenden, die aus mehreren Aufrufen von AddNew, Edit, Updateund Delete, die ausgeführt werden, jedoch erst, wenn Sie explizit aufrufen CommitTrans . Durch das Einrichten einer Transaktion können Sie eine Reihe solcher Aufrufe ausführen und gleichzeitig das Rollback beibehalten. Wenn eine kritische Ressource nicht verfügbar ist oder eine andere Bedingung verhindert, dass die gesamte Transaktion abgeschlossen wird, können Sie die Transaktion zurücksetzen, anstatt es zu übernehmen. In diesem Fall wirken sich keine der Änderungen der Transaktion auf die Datenquelle aus.

Hinweis

Derzeit unterstützt die Klasse CRecordset keine Aktualisierungen der Datenquelle, wenn Sie massenweises Abrufen von Zeilen implementiert haben. Dies bedeutet, dass Sie keine Anrufe an AddNew, Edit, , Deleteoder Update. Sie können jedoch eigene Funktionen schreiben, um Aktualisierungen durchzuführen und diese Funktionen dann innerhalb einer bestimmten Transaktion aufzurufen. Weitere Informationen zum Abrufen von Massenzeilen finden Sie unter Recordset: Abrufen von Datensätzen in Massen (ODBC).For more information about bulk row fetching, see Recordset: Fetching Records in Bulk (ODBC).For more information about bulk row fetching, see Recordset: Fetching Records in Bulk (ODBC).For more information

Hinweis

Neben dem Einfluss auf das Recordset wirken sich Transaktionen auf SQL-Anweisungen aus, die Sie direkt ausführen, solange Sie den ODBC-HDBC verwenden, der Ihrem CDatabase Objekt zugeordnet ist, oder ein ODBC-HSTMT basierend auf diesem HDBC.

Transaktionen sind besonders hilfreich, wenn Sie mehrere Datensätze haben, die gleichzeitig aktualisiert werden müssen. In diesem Fall möchten Sie eine halb abgeschlossene Transaktion vermeiden, z. B. wenn eine Ausnahme ausgelöst wurde, bevor die letzte Aktualisierung vorgenommen wurde. Das Gruppieren solcher Aktualisierungen in eine Transaktion ermöglicht eine Wiederherstellung (Rollback) aus den Änderungen und gibt die Datensätze an den Zustand "Pretransaction" zurück. Wenn z. B. ein Bankkonto geld von Konto A auf Konto B überträgt, müssen sowohl die Auszahlung von A als auch die Einzahlung auf B erfolgreich sein, um die Gelder richtig zu verarbeiten, oder die gesamte Transaktion muss fehlschlagen.

In den Datenbankklassen führen Sie Transaktionen über Objekte aus CDatabase . Ein CDatabase Objekt stellt eine Verbindung mit einer Datenquelle dar, und ein oder mehrere Recordsets, die diesem CDatabase Objekt zugeordnet sind, arbeiten mit Tabellen der Datenbank über Recordset-Memberfunktionen.

Hinweis

Es wird nur eine Ebene von Transaktionen unterstützt. Transaktionen können nicht geschachtelt werden oder eine Transaktion umfasst mehrere Datenbankobjekte.

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

Siehe auch

Open Database Connectivity (ODBC)