ODBC でのトランザクション
ODBC のトランザクションは接続レベルで管理されます。アプリケーションはトランザクションの完了時に、その接続のすべてのステートメント ハンドルで完了したすべての作業を、コミットまたはロールバックします。トランザクションをコミットまたはロールバックするには、アプリケーションから COMMIT ステートメントや ROLLBACK ステートメントを実行するのではなく、SQLEndTran を呼び出す必要があります。
アプリケーションは SQLSetConnectAttr を呼び出して、トランザクションを管理する次の 2 つの ODBC モードを切り替えます。
- 自動コミット モード
各ステートメントは、正常に完了したときに自動的にコミットされます。自動コミット モードで実行するときは、他のトランザクション管理関数は必要ありません。 - 手動コミット モード
SQLEndTran を呼び出してトランザクションが明確に停止されるまで、実行されるすべてのステートメントが同じトランザクションに含まれます。
自動コミット モードは、ODBC の既定のトランザクション モードです。接続確立後は、SQLSetConnectAttr を呼び出して、自動コミット モードを無効に設定し、手動コミット モードに切り替えるまで、自動コミット モードの状態が維持されます。アプリケーションが自動コミットを無効にすると、次にデータベースに送信されるステートメントでトランザクションが開始されます。その後、SQL_COMMIT オプションまたは SQL_ROLLBACK オプションのいずれかを指定して SQLEndTran を呼び出すまで、トランザクションは有効のままです。SQLEndTran の後にデータベースに送信されるコマンドで、次のトランザクションが開始されます。
手動コミット モードから自動コミット モードに切り替えると、ドライバは接続で現在開かれているすべてのトランザクションをコミットします。
ODBC アプリケーションで BEGIN TRANSACTION、COMMIT TRANSACTION、ROLLBACK TRANSACTION などの Transact-SQL トランザクション ステートメントを使用すると、ドライバの動作が不確定になる可能性があるので、このような Transact-SQL トランザクション ステートメントは使用しないでください。ODBC アプリケーションは自動コミット モードで実行するか、トランザクション管理関数やステートメントを使用しないか、手動コミット モードで実行し、ODBC SQLEndTran 関数を使用してトランザクションをコミットまたはロールバックする必要があります。