トランザクションのサポート
トランザクションのサポートの度合いは、ドライバーによって定義されます。 ODBC は、データに対する複数の更新を管理する必要がない単一ユーザーまたはデスクトップ データベースに実装されるように設計されています。 さらに、トランザクションをサポートする一部のデータベースは、SQL のデータ操作言語 (DML) ステートメントでのみサポートします。トランザクションがアクティブな場合のデータ定義言語 (DDL) の使用に関する制限または特別なトランザクション セマンティクスがあります。 つまり、テーブルに対する複数の同時更新に対するトランザクション のサポートはありますが、トランザクション中にテーブルの数と定義を変更することはできません。
アプリケーションは、SQL_TXN_CAPABLE オプションを指定して SQLGetInfo を呼び出すことによって、トランザクションがサポートされているかどうか、DDL をトランザクションに含めることができるかどうか、トランザクションに DDL を含める特殊効果を決定します。 詳細については、「SQLGetInfo 関数の説明」を参照してください。
ドライバーがトランザクションをサポートしていないが、アプリケーションが (ODBC 以外の API を使用して) データをロックおよびロック解除できる場合、アプリケーションは必要に応じてレコードとテーブルをロックおよびロック解除することで、トランザクションのサポートを実現できます。 口座振替の例を実装するために、アプリケーションは両方の口座のレコードをロックし、現在の値をコピーし、最初の口座から引き落とし、2 番目の口座に入金し、レコードのロックを解除します。 いずれかの手順が失敗した場合、アプリケーションはコピーを使用してアカウントをリセットします。
トランザクションをサポートするデータ ソースであっても、特定の環境内で一度に複数のトランザクションをサポートできない場合があります。 アプリケーションは、SQL_MULTIPLE_ACTIVE_TXN オプションを使用して SQLGetInfo を呼び出して、データ ソースが同じ環境内の複数の接続で同時アクティブ トランザクションをサポートできるかどうかを判断します。 接続ごとに 1 つのトランザクションがあるため、これは、同じデータ ソースへの複数の接続を持つアプリケーションに対してのみ関係します。