次の方法で共有


ODBC でのトランザクションの実行

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

重要

SQL Server Native Client (SNAC) は以下に付属していません。

  • SQL Server 2022 (16.x) 以降
  • SQL Server Management Studio 19 以降

SQL Server Native Client (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。

新しいプロジェクトの場合は、次のいずれかのドライバーを使用します。

SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、この「サポート ライフサイクルの例外」を参照してください。

ODBC のトランザクションは接続レベルで管理されます。 アプリケーションはトランザクションの完了時に、その接続のすべてのステートメント ハンドルで完了したすべての作業を、コミットまたはロールバックします。 トランザクションをコミットまたはロールバックするには、アプリケーションは COMMIT または ROLLBACK ステートメントを送信する代わりに SQLEndTran を呼び出す必要があります。

アプリケーションは SQLSetConnectAttr を呼び出して、トランザクションを管理する 2 つの ODBC モードを切り替えます。

  • 自動コミット モード

    各ステートメントは、正常に完了したときに自動的にコミットされます。 自動コミット モードで実行するときは、他のトランザクション管理関数は必要ありません。

  • 手動コミット モード

    実行されたすべてのステートメントは、SQLEndTran を呼び出して特に停止するまで、同じトランザクションに含まれます。

自動コミット モードは、ODBC の既定のトランザクション モードです。 接続が確立されると、自動コミット モードをオフに設定して手動コミット モードに切り替えるために SQLSetConnectAttr が呼び出されるまで、自動コミット モードになります。 アプリケーションが自動コミットを無効にすると、次にデータベースに送信されるステートメントでトランザクションが開始されます。 その後、アプリケーションが sqlEndTran を SQL_COMMIT オプションまたは SQL_ROLLBACK オプションで呼び出すまで、トランザクションは有効なままになります。 SQLEndTran が次のトランザクションを開始した後にデータベースに送信されるコマンド。

手動コミット モードから自動コミット モードに切り替えると、ドライバーは接続で現在開かれているすべてのトランザクションをコミットします。

ODBC アプリケーションで BEGIN TRANSACTION、COMMIT TRANSACTION、ROLLBACK TRANSACTION などの Transact-SQL トランザクション ステートメントを使用すると、ドライバーの動作が不確定になる可能性があるので、このような Transact-SQL トランザクション ステートメントは使用しないでください。 ODBC アプリケーションは、自動コミット モードで実行し、トランザクション管理関数やステートメントを使用しないか、手動コミット モードで実行し、ODBC SQLEndTran 関数を使用してトランザクションをコミットまたはロールバックする必要があります。

参照

トランザクションの実行 (ODBC)