DB2 の AutoCommit を VC++ ADO接続で解除する方法
Visual C++ 2010 / ADO 接続で IBM DB2 に接続しています。
行単位で追加/更新後にファイルの移動を行うようなプログラムを作成しています。
ファイル移動失敗時にロールバックを試みましたが、コミットされた状態になってしまいました。
接続時、もしくはDML文実行時にAutoCommitを解除する方法はありませんでしょうか?
実ソースがクラス化されているので、関わる部分を抜き出すと以下の様な感じです。
CString szConnection = "Provider=IBMDADB2.DB2COPY1;Password=PASS;Persist Security Info=True;User ID=USER;Data Source=TESTDB;Location=xxx.xx.xxx.xx;Extended Properties="";Package Collection";
_ConnectionPtr _connection;
_connection.CreateInstance(__uuidof(Connection));
_connection->Open((LPCTSTR) szParam, _T(""), _T(""), adConnectUnspecified);
_connection->BeginTrans();
CString szSql = "※ 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 経由で渡す方法がわかりません
※上記の問題的には処理順序を変えてしのぎましたが、気になるトピックなので残させていただきます。