質問: "※ UPDATE or INSERT "; _connection->Execute((_bstr_t) szSql, &va, adOptionUnspecified); if (何らかの処理) { // 成功 _connection->CommitTrans(); } else { // 失敗時 _connection->RollbackTrans(); } ``` 2016-06-27 追記 接続プロパティ(db2cli.ini や odbc設定ファイル)で AutoCommit=0 もしくは ODBC の SqlSetAttribute で SQL_AUTOCOMMIT_OFF あたりを渡せばいいみたいですが、Ado _ConnectionPtr 経由で渡す方法がわかりません ※上記の問題的には処理順序を変えてしのぎましたが、気になるトピックなので残させていただきます。
回答: BeginTrans、CommitTrans、RollbackTrans メソッドによると > > すべてのプロバイダでトランザクションがサポートされているわけではありません。Connection オブジェクトの Properties コレクションに、"Transaction DDL" というプロバイダ定義のプロパティが表示されているかどうかを確認してください。このプロパティが表示されていれば、そのプロバイダはトランザクションをサポートしています。トランザクションをサポートしていないプロバイダの場合は、トランザクション メソッドを呼び出すと、エラーが発生します。 > > > とのことです。`_connection->Properties`を確認してみてください。 また ``` _connection->BeginTrans(); ``` の戻り値はどうなっているでしょうか? エラーが発生していたりしませんか? ちなみに`1`が返ってくるべきです。というのもIBM OLE DB Provider の制限によると > > IBMDADB2 では、ITransactionLocal インターフェースにより、 自動コミットおよびユーザー制御のトランザクション・スコープがサポートされています。 デフォルトのスコープは自動コミット・トランザクション・スコープです。 ネストされたトランザクションはサポートされていません。 > > > とあり`2`以上のネストされたトランザクションは動作しないものと思われます。