掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ADO の トランザクションのステイタスについて (ID:101666)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
そういう判断をしなければならない状況にあるという時点で、 そもそもの設計に問題がある可能性がありますが、今回は DB操作ではなく、DB捜査のようなので、仕方が無いのかな…。 --- Connection オブジェクトの BeginTrans/RollbackTrans/CommitTrans メソッドを 呼びだしているのであれば、汎用的には、それぞれのメソッド呼び出しに追従して、 BeginTransComplete/RollbackTransComplete/CommitTransComplete イベントが 発生しますので、それで管理できるかと思います。(WithEvents 変数を利用する) この方法の場合、トランザクションの成否なども、イベント引数で判断することができます。 たとえば、トランザクションのネスト回数(BeginTrans メソッドの戻り値)は、 BeginTransComplete イベントの第1引数で判断できますし、トランザクションの成否などは 同イベントの第2、第3引数にて判断できます。 http://msdn.microsoft.com/ja-jp/library/cc408108.aspx あるいは、新たにトランザクションを開始したのち、即座にチェックポイントにまで 復元して判断するという方法もあります。最大ネスト回数を超えて BeginTrans した場合には、 #DEFINE XACT_E_XTIONEXISTS _HRESULT_TYPEDEF_(0X8004D013L) のエラーが発生しますので、それをエラートラップもしくは先述のイベント引数で エラー番号が &H8004D013 にあたるものを拾うというものです。 ちなみに、トランザクション無しにコミット/ロールバックを行った場合には、 #define XACT_E_NOTRANSACTION _HRESULT_TYPEDEF_(0x8004D00EL) が発生し、そもそもトランザクションをサポートしていない場合においては、 #define XACT_E_NOTSUPPORTED _HRESULT_TYPEDEF_(0x8004D00FL) のエラーが発生しますので、これらも併せてチェックした方が良いかと思います。 問題は、データベース側はトランザクションをサポートしているのに、接続に使った OLE DB プロバイダが、トランザクションをサポートしていない場合の判断方法でしょうね。 もし、connection.Properties("Transaction DDL").Value が DBPROPVAL_TC_NONE (=0) を 返す場合(OLE DB プロバイダ側がトランザクションをサポートしていない場合)には、 直接、SQL コマンド等でトランザクションを管理する必要が生じるかと思います。 (この場合は汎用的な取得方法はありません。各データベースごとに異なる手段が必要です)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.