Freigeben über


Transaktionsverarbeitung

Eine -Transaktion begrenzt den Anfang und das Ende einer Reihe von Datenzugriffsvorgängen, die über eine Verbindung ausgeführt werden. Vorbehaltlich der Transaktionsfunktionen Ihrer Datenquelle können Sie mit dem Connection-Objekt auch Transaktionen erstellen und verwalten. Beispielsweise können Sie mithilfe des Microsoft OLE DB Providers für SQL Server auf eine Microsoft SQL Server-Datenbank mehrere verschachtelte Transaktionen für die Befehle erstellen, die Sie ausführen.

ADO stellt sicher, dass Änderungen an einer Datenquelle, die sich aus Vorgängen in einer Transaktion ergeben, entweder vollständig erfolgreich durchgeführt werden oder gar nicht.

Wenn Sie die Transaktion abbrechen oder eine seiner Vorgänge fehlschlägt, ist das Ergebnis so, als ob keine der Vorgänge in der Transaktion aufgetreten ist. Die Datenquelle bleibt wie vor Beginn der Transaktion erhalten.

ADO stellt die folgenden Methoden zum Steuern von Transaktionen bereit: BeginTrans, CommitTransund RollbackTrans. Verwenden Sie diese Methoden mit einem Connection-Objekt, wenn Sie eine Reihe von Änderungen speichern oder abbrechen möchten, die an den Quelldaten als einzelne Einheit vorgenommen wurden. Um beispielsweise Geld zwischen Konten zu übertragen, subtrahieren Sie einen Betrag von einem Betrag und addieren denselben Betrag zum anderen. Wenn ein Update fehlschlägt, werden die Konten nicht mehr ausgeglichen. Wenn Sie diese Änderungen innerhalb einer geöffneten Transaktion vornehmen, wird sichergestellt, dass entweder alle oder keine der Änderungen durchlaufen werden.

Anmerkung

Nicht alle Anbieter unterstützen Transaktionen. Stellen Sie sicher, dass die vom Anbieter definierte Eigenschaft "Transaction DDL" in der Connection-Objekt Properties-Sammlung angezeigt wird, was darauf hinweist, dass der Anbieter Transaktionen unterstützt. Wenn der Anbieter Transaktionen nicht unterstützt, wird beim Aufrufen einer dieser Methoden ein Fehler zurückgegeben.

Nachdem Sie die BeginTrans--Methode aufgerufen haben, wird der Anbieter keine Änderungen mehr ausführen, die Sie vornehmen, bis Sie CommitTrans- oder RollbackTrans- aufrufen, um die Transaktion zu beenden.

Durch Aufrufen der CommitTrans--Methode werden Änderungen gespeichert, die in einer geöffneten Transaktion für die Verbindung vorgenommen wurden, und die Transaktion wird beendet. Durch Aufrufen der RollbackTrans--Methode werden alle Änderungen, die in einer geöffneten Transaktion vorgenommen wurden, rückgängig gemacht und die Transaktion beendet. Beim Aufrufen einer der beiden Methoden wird ein Fehler generiert, wenn keine geöffnete Transaktion vorhanden ist.

Abhängig von der Eigenschaft Attributes des Connection-Objekts kann entweder das Aufrufen der CommitTrans- oder der RollbackTrans-Methode möglicherweise automatisch eine neue Transaktion starten. Wenn die eigenschaft Attributes auf adXactCommitRetainingfestgelegt ist, startet der Anbieter automatisch eine neue Transaktion nach einem CommitTrans Aufruf. Wenn die eigenschaft Attributes auf adXactAbortRetainingfestgelegt ist, startet der Anbieter automatisch eine neue Transaktion nach einem RollbackTrans Aufruf.

Transaktionsisolationsstufe

Verwenden Sie die eigenschaft IsolationLevel, um die Isolationsebene einer Transaktion für ein Connection-Objekt festzulegen. Die Einstellung wird erst wirksam, wenn Sie die BeginTrans--Methode das nächste Mal aufrufen. Wenn die von Ihnen angeforderte Isolationsstufe nicht verfügbar ist, gibt der Anbieter möglicherweise die nächste größere Isolationsstufe zurück. Weitere Informationen zu gültigen Werten finden Sie in der IsolationLevel--Eigenschaft in der ADO-Programmierreferenz.

Geschachtelte Transaktionen

Für Anbieter, die geschachtelte Transaktionen unterstützen, startet das Aufrufen der BeginTrans--Methode innerhalb einer geöffneten Transaktion eine neue geschachtelte Transaktion. Der Rückgabewert gibt die Ebene der Schachtelung an: Ein Rückgabewert von "1" gibt an, dass Sie eine Transaktion auf oberster Ebene geöffnet haben (d. h. die Transaktion ist nicht in einer anderen Transaktion geschachtelt), "2" gibt an, dass Sie eine Transaktion auf zweiter Ebene geöffnet haben (eine Transaktion, die in einer Transaktion auf oberster Ebene geschachtelt ist) usw. Das Aufrufen CommitTrans- oder RollbackTrans- wirkt sich nur auf die zuletzt geöffnete Transaktion aus; Sie müssen die aktuelle Transaktion schließen oder zurücksetzen, bevor Sie alle Transaktionen auf höherer Ebene auflösen können.