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 Update
auf 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
, Update
und 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
, , Delete
oder 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:
Transaktion: Ausführen einer Transaktion in einem Recordset (ODBC)
Transaktion: Wie Transaktionen sich auf Aktualisierungen auswirken (ODBC)