- PR -

ODP.NETのTransactionについて

1
投稿者投稿内容
gorisaku
ベテラン
会議室デビュー日: 2004/04/17
投稿数: 95
投稿日時: 2004-07-07 21:48
VS.NET(C#) + Oracle9.2.0.4(ODP.NET)で開発をしています。

OracleのTransactionが開始されているかどうかを判別したいのですが、
いまいち方法がわかりません。
OracleTransactionのCompleteがクイックウォッチで
検索可能でしたが、アクセスできない保護レベルになっており
エラーが発生します。
どのような方法でTransactionが開始されているかを判別されている方は
おられますか?
ご教授お願いいたします。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2004-07-08 11:41
コード:
public class DbAccess {
  OracleConnection _con = null;
  OracleTransaction _trans = null;
・
・
・
  public void BeginTrans() {
    _trans = _con.BeginTrans();
  }

  public bool IsTransactional {
    get {
        return (_con != null && _trans != null && 
               (_con.State == ConnectionState.Open || _con.State == ConnectionState.Connecting));
    }
  }
}



こんな感じでしてますけど、他にいいやり方があれば私も知りたいです。
gorisaku
ベテラン
会議室デビュー日: 2004/04/17
投稿数: 95
投稿日時: 2004-07-09 11:43
まるくさん ありがとうございます。
私が初心者なので何ともいえないですが、このコードだと一度作成された
トランザクションをコミットやロールバックせずに
再びトランザクションを作成する(本当はエラー)場合などには
使えないですよね??
やりたいのは今指定しているトランザクションがアクティブかどうかの
判別なんです。
やはり難しいのでしょうか?

引用:

public class DbAccess {
OracleConnection _con = null;
OracleTransaction _trans = null;



public void BeginTrans() {
_trans = _con.BeginTrans();
}

public bool IsTransactional {
get {
return (_con != null && _trans != null &&
(_con.State == ConnectionState.Open || _con.State == ConnectionState.Connecting));
}
}
}

まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2004-07-09 15:03
引用:

私が初心者なので何ともいえないですが、このコードだと一度作成された
トランザクションをコミットやロールバックせずに
再びトランザクションを作成する(本当はエラー)場合などには
使えないですよね??


よく意味がわからないのですが。。。本当はエラーとわかっているにもかかわらず、作成しようとするのですか?
アクセスできない保護レベルになっているという事は、利用者からそれを見る必要がないからだと思います。OracleTransactionオブジェクトを取得できた時点で、トランザクションは有効と考えてよいと。

引用:

やりたいのは今指定しているトランザクションがアクティブかどうかの
判別なんです。


_transのインスタンスはnullじゃないけどコネクションが切れてる、とかだったら、コネクションを判定すれば良いでしょうし。どうも必要性がよく判らないです。。。

できたとして、どういうコードを書きたいのでしょうか?

どういう理由からその判別が必要なのか教えていただければ、回避策とかが書き込みされやすくなると思います。
1

スキルアップ/キャリアアップ(JOB@IT)