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 (SSMS) から削除されました。 SQL Server Native Client (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。 今後、新しい Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server または最新の Microsoft ODBC Driver for SQL Server に切り替えてください。 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)