Unterstützen von Transaktionen in OLE DB
Eine Transaktion ist eine Möglichkeit zum Gruppieren oder Batchen einer Reihe von Aktualisierungen an einer Datenquelle, sodass entweder alle erfolgreich sind und gleichzeitig zugesichert werden oder (wenn eine dieser Vorgänge fehlschlägt) kein Commit ausgeführt wird und die gesamte Transaktion zurückgesetzt wird. Dieser Prozess stellt die Integrität des Ergebnisses für die Datenquelle sicher.
OLE DB unterstützt Transaktionen mit den folgenden drei Methoden:
Beziehung zwischen Sitzungen und Transaktionen
Ein einzelnes Datenquellenobjekt kann ein oder mehrere Sitzungsobjekte erstellen, von denen jedes innerhalb oder außerhalb des Bereichs einer Transaktion zu einem bestimmten Zeitpunkt sein kann.
Wenn eine Sitzung keine Transaktion eingibt, werden alle Aufgaben innerhalb dieser Sitzung im Datenspeicher für jeden Methodenaufruf sofort übernommen. (Dies wird manchmal als AutoCommit-Modus oder impliziter Modus bezeichnet.)
Wenn eine Sitzung eine Transaktion eingibt, ist die gesamte In dieser Sitzung im Datenspeicher erledigte Arbeit Teil dieser Transaktion und wird als einzelne Einheit zugesichert oder abgebrochen. (Dies wird manchmal als manueller Commit-Modus bezeichnet.)
Die Transaktionsunterstützung ist anbieterspezifisch. Wenn der von Ihnen verwendete Anbieter Transaktionen unterstützt, unterstützt ein Sitzungsobjekt, das eine (nicht geschachtelte) Transaktion unterstützt ITransaction
und ITransactionLocal
eingeben kann. Die OLE DB Templates-Klasse CSession unterstützt diese Schnittstellen und ist die empfohlene Methode zum Implementieren der Transaktionsunterstützung in Visual C++.
Starten und Beenden der Transaktion
Sie rufen die StartTransaction
Methoden Commit
und Methoden Abort
des Rowset-Objekts im Consumer auf.
Beim Aufrufen ITransactionLocal::StartTransaction
wird eine neue lokale Transaktion gestartet. Wenn Sie die Transaktion starten, werden alle von späteren Vorgängen vorgeschriebenen Änderungen erst auf den Datenspeicher angewendet, wenn Sie einen Commit für die Transaktion ausführen.
Die Transaktion wird aufgerufen ITransaction::Commit
oder ITransaction::Abort
beendet. Commit
bewirkt, dass alle Änderungen im Rahmen der Transaktion auf den Datenspeicher angewendet werden. Abort
bewirkt, dass alle Änderungen innerhalb des Gültigkeitsbereichs der Transaktion abgebrochen werden und der Datenspeicher in dem Zustand verbleibt, den sie vor dem Start der Transaktion hatte.
Geschachtelte Transaktionen
Eine geschachtelte Transaktion tritt auf, wenn Sie eine neue lokale Transaktion starten, wenn in der Sitzung bereits eine aktive Transaktion vorhanden ist. Die neue Transaktion wird als geschachtelte Transaktion unterhalb der aktuellen Transaktion gestartet. Wenn der Anbieter keine geschachtelten Transaktionen unterstützt, gibt das Aufrufen StartTransaction
, wenn bereits eine aktive Transaktion für die Sitzung vorhanden ist, XACT_E_XTIONEXISTS zurück.
Verteilte Transaktionen
Eine verteilte Transaktion ist eine Transaktion, die verteilte Daten aktualisiert; d. h. Daten auf mehr als einem vernetzten Computersystem. Wenn Sie Transaktionen über ein verteiltes System unterstützen möchten, sollten Sie .NET Framework anstelle der OLE DB-Transaktionsunterstützung verwenden.