Verarbeiten von Transaktionen
Eine Transaction trennt den Anfang und das Ende einer Reihe von Datenzugriffsvorgängen, die über eine Verbindung ausgeführt werden. Vorbehaltlich der transaktionsbezogenen Funktionen Ihrer Datenquelle ermöglicht das Connection-Objekt auch das Erstellen und Verwalten von Transaktionen. Beispielsweise können Sie mithilfe des Microsoft OLE DB-Anbieters für SQL Server zum Aufrufen einer Datenbank in Microsoft SQL Server mehrere geschachtelte 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, erfolgreich zusammen oder gar nicht auftreten.
Wenn Sie die Transaktion abbrechen oder einer der Vorgänge fehlschlägt, ist das Ergebnis, wie wenn keiner der Vorgänge in der Transaktion erfolgt wäre. Die Datenquelle bleibt wie vor Beginn der Transaktion erhalten.
ADO stellt die folgenden Methoden zum Steuern von Transaktionen bereit: BeginTrans, CommitTrans und RollbackTrans. Verwenden Sie diese Methoden mit einem Connection-Objekt, wenn Sie eine Reihe von Änderungen an den Quelldaten als einzelne Einheit speichern oder verwerfen möchten. Wenn Sie beispielsweise Geld zwischen Konten überweisen möchten, subtrahieren Sie einen Betrag von einem Konto und addieren denselben Betrag zum anderen Konto. Tritt bei einer der Aktualisierungen ein Fehler auf, sind die Konten nicht mehr ausgeglichen. Indem Sie diese Änderungen in einer geöffneten Transaktion vornehmen, stellen Sie sicher, dass entweder alle oder keine der Änderungen angewendet werden.
Hinweis
Nicht alle Anbieter unterstützen Transaktionen. Stellen Sie sicher, dass die vom Anbieter definierte Eigenschaft für die Transaktions-DDL in der Properties-Sammlung des Connection-Objekts angezeigt wird. Dies gibt an, dass der Anbieter Transaktionen unterstützt. Wenn der Anbieter Transaktionen nicht unterstützt, wird beim Aufrufen dieser Methoden ein Fehler zurückgeben.
Nachdem Sie die BeginTrans-Methode aufgerufen haben, werden von Ihnen vorgenommene Änderungen nicht mehr sofort vom Anbieter committet, bis Sie CommitTrans oder RollbackTrans aufrufen, um die Transaktion zu beenden.
Beim Aufrufen der CommitTrans-Methode werden alle Änderungen gespeichert, die in einer geöffneten Transaktion für die Verbindung vorgenommen wurden, und die Transaktion wird beendet. Beim Aufrufen der RollbackTrans-Methode werden alle Änderungen zurückgesetzt, die in einer geöffneten Transaktion vorgenommen wurden, und die Transaktion wird beendet. Wenn beim Aufrufen dieser Methoden keine geöffnete Transaktion vorhanden ist, wird ein Fehler generiert.
Abhängig von der Attributes-Eigenschaft des Connection-Objekts kann beim Aufrufen der Methode CommitTrans oder RollbackTrans automatisch eine neue Transaktion gestartet werden. Wenn die Attributes-Eigenschaft auf adXactCommitRetaining festgelegt ist, startet der Anbieter nach einem CommitTrans-Aufruf automatisch eine neue Transaktion. Wenn die Attributes-Eigenschaft auf adXactAbortRetaining festgelegt ist, startet der Anbieter nach einem RollbackTrans-Aufruf automatisch eine neue Transaktion.
Transaktionsisolationsstufe
Verwenden Sie die IsolationLevel-Eigenschaft, um die Isolationsebene einer Transaktion für ein Connection-Objekt festzulegen. Die Einstellung wird erst wirksam, wenn Sie die BeginTrans-Methode zum nächsten Mal aufrufen. Wenn die von Ihnen angeforderte Isolationsebene nicht verfügbar ist, kann der Anbieter die nächstgrößere Isolationsebene zurückgeben. Weitere Informationen zu gültigen Werten finden Sie in der IsolationLevel-Eigenschaft in der ADO-Programmierreferenz.
Geschachtelte Transaktionen
Bei Anbietern, die geschachtelte Transaktionen unterstützen, wird durch das Aufrufen der BeginTrans-Methode innerhalb einer geöffneten Transaktion eine neue, geschachtelte Transaktion gestartet. Der Rückgabewert gibt die Schachtelungsebene an: „1“ gibt an, dass Sie eine Transaktion auf oberster Ebene geöffnet haben (d. h. die Transaktion ist nicht innerhalb 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 von 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 Transaktionen auf höherer Ebene auflösen können.