Unterstützen von Transaktionen in OLE DB
Aktualisiert: November 2007
Eine Transaktion ist eine Methode zum Gruppieren (bzw. Stapeln) einer Reihe von Aktualisierungen zu einer Datenquelle, sodass entweder alle erfolgreich ausgeführt werden und sofort übermittelt werden oder (wenn eine von ihnen fehlschlägt) keine Aktualisierung übergeben und ein Rollback für die ganze Transaktion ausgeführt wird. Dieser Prozess stellt die Integrität des Ergebnisses hinsichtlich der 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. Jedes dieser Objekte kann sich zu einem bestimmten Zeitpunkt innerhalb oder außerhalb des Gültigkeitsbereichs einer Transaktion befinden.
Wenn eine Sitzung sich nicht im Bereich einer Transaktion befindet, wirken sich alle im Rahmen dieser Sitzung am Datenspeicher vorgenommenen Arbeiten unmittelbar auf die einzelnen Methodenaufrufe aus. (Dies wird manchmal als Autocommit-Modus oder impliziter Modus bezeichnet.)
Wenn eine Sitzung in eine Transaktion eintritt, sind alle im Rahmen dieser Sitzung am Datenspeicher vorgenommenen Arbeiten Teil dieser Transaktion und werden als Einheit übermittelt oder abgebrochen. (Dies wird manchmal als Manualcommit-Modus bezeichnet.)
Die Unterstützung von Transaktionen ist anbieterabhängig. Wenn der von Ihnen verwendete Anbieter Transaktionen unterstützt, kann ein Sitzungsobjekt, das ITransaction und ITransactionLocal unterstützt, in den Gültigkeitsbereich einer einfachen (d. h. nicht geschachtelten) Transaktion eintreten. Die OLE DB-Vorlagenklasse CSession unterstützt diese Schnittstellen und wird zur Implementierung der Transaktionsunterstützung in Visual C++ empfohlen.
Starten und Beenden der Transaktion
Sie rufen die Methoden StartTransaction, Commit und Abort im Rowset-Objekt im Consumer auf.
Durch das Aufrufen von ITransactionLocal::StartTransaction wird eine neue lokale Transaktion gestartet. Wenn die Transaktion gestartet wurde, wirken sich durch nachfolgende Operationen entstandene Änderungen erst dann auf den Datenspeicher aus, wenn die Transaktion übermittelt wird.
Durch Aufrufen von ITransaction::Commit oder ITransaction::Abort wird die Transaktion beendet. Commit bewirkt, dass alle Änderungen im Gültigkeitsbereich der Transaktion auf den Datenspeicher angewendet werden. Abort bewirkt, dass alle Änderungen im Gültigkeitsbereich der Transaktion abgebrochen werden und der Datenspeicher in dem Zustand belassen wird, den er vor dem Start der Transaktion hatte.
Geschachtelte Transaktionen
Eine geschachtelte Transaktion liegt vor, wenn Sie zusätzlich zu einer bereits bestehenden aktiven Transaktion eine neue lokale Transaktion starten. Die neue Transaktion wird als geschachtelte Transaktion unterhalb der aktuellen Transaktion gestartet. Wenn der Anbieter keine geschachtelten Transaktionen unterstützt, wird beim Aufrufen von StartTransaction bei bereits bestehender aktiver Transaktion im Rahmen dieser Sitzung XACT_E_XTIONEXISTS zurückgegeben.
Verteilte Transaktionen
Eine verteilte Transaktion aktualisiert verteilte Daten, d. h. Daten, die sich auf mehr als einem vernetzten Computersystem befinden. Wenn Sie Transaktionen über ein verteiltes System unterstützen möchten, sollten Sie anstelle der OLE DB-Transaktionsunterstützung .NET Framework verwenden.
Informationen zu Transaktionen in Microsoft .NET Framework finden Sie im Windows Software Development Kit (SDK) unter Processing Transactions.