Freigeben über


Transaktionsunterstützung

Der Grad der Unterstützung für Transaktionen ist treiberdefiniert. ODBC ist so konzipiert, dass sie in einer Einzelbenutzer- oder Desktopdatenbank implementiert werden kann, die nicht mehrere Aktualisierungen ihrer Daten verwalten muss. Darüber hinaus werden einige Datenbanken, die Transaktionen unterstützen, nur für die DML-Anweisungen (Data Manipulation Language) von SQL ausgeführt; Es gibt Einschränkungen oder spezielle Transaktionssemantik hinsichtlich der Verwendung von Data Definition Language (DDL), wenn eine Transaktion aktiv ist. Das heißt, es gibt möglicherweise Transaktionsunterstützung für mehrere gleichzeitige Aktualisierungen von Tabellen, aber nicht zum Ändern der Anzahl und Definition von Tabellen während einer Transaktion.

Eine Anwendung bestimmt, ob Transaktionen unterstützt werden, ob DDL in eine Transaktion eingeschlossen werden kann, und alle Spezialeffekte, die DDL in eine Transaktion einschließen, durch Aufrufen von SQLGetInfo mit der Option SQL_TXN_CAPABLE. Weitere Informationen finden Sie in der Beschreibung der SQLGetInfo-Funktion .

Wenn der Treiber Transaktionen nicht unterstützt, die Anwendung jedoch die Möglichkeit hat (eine andere API als ODBC) zum Sperren und Entsperren von Daten, können Anwendungen transaktionsunterstützung erzielen, indem Datensätze und Tabellen bei Bedarf gesperrt und entsperrt werden. Um das Beispiel für die Kontoübertragung zu implementieren, würde die Anwendung die Datensätze für beide Konten sperren, die aktuellen Werte kopieren, das erste Konto abrechnen, das zweite Konto gutschriften und die Datensätze entsperren. Wenn schritte fehlschlugen, würde die Anwendung die Konten mithilfe der Kopien zurücksetzen.

Auch Datenquellen, die Transaktionen unterstützen, können möglicherweise nicht mehr als eine Transaktion gleichzeitig in einer bestimmten Umgebung unterstützen. Anwendungen rufen SQLGetInfo mit der Option SQL_MULTIPLE_ACTIVE_TXN auf, um zu ermitteln, ob eine Datenquelle gleichzeitig aktive Transaktionen für mehrere Verbindungen in derselben Umgebung unterstützen kann. Da pro Verbindung eine Transaktion vorhanden ist, ist dies nur für Anwendungen interessant, die mehrere Verbindungen mit derselben Datenquelle haben.