C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: ConnectionからTransactionを知る方法


(過去ログ 93 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■55423 / inTopicNo.1)  ConnectionからTransactionを知る方法
  
□投稿者/ furu (11回)-(2010/12/01(Wed) 13:50:08)

分類:[C#] 

c#2.0です。

DbConnection.BeginTransaction()でトランザクションを開始し、
DbConnection.CreateCommand()でコマンドを作成し、
DbCommand.ExecuteNonQuery()で実行する際、

DbCommand.Transactionにトランザクションを
設定しなければ、なりません。

BeginTransaction()で作成したトランザクションを
DbConnectionで知る方法はないでしょうか?

トランザクションを設定しないで、
ExecuteNonQuery()で実行するとエラーとなるので、
コネクションはトランザクションを
知っているのではないでしょうか?

並列トランザクションはしない(Oracleなのでできない)ので
各ルーチンにトランザクションを渡さず、
コネクションのみを渡すようにしたいです。

よろしくお願いします。

追伸:
  トランザクションが保留中(Commit()やRollback()をしていない)か
  どうかを知る方法も併せて募集中です。

引用返信 編集キー/
■55425 / inTopicNo.2)  Re[1]: ConnectionからTransactionを知る方法
□投稿者/ shu (212回)-(2010/12/01(Wed) 14:27:37)
No55423 (furu さん) に返信
> c#2.0です。
>
> DbConnection.BeginTransaction()でトランザクションを開始し、
> DbConnection.CreateCommand()でコマンドを作成し、
> DbCommand.ExecuteNonQuery()で実行する際、
>
> DbCommand.Transactionにトランザクションを
> 設定しなければ、なりません。

DbTransaction tr = DbConnection.BeginTransaction();
DbCommand.Transaction = tr;

trを渡したくないということですか?

コネクションに対しトランザクションが1つとは限らないので無理でしょう。
私はConnectionとTransactionを一緒にラッピングしたクラスを使用しています。

引用返信 編集キー/
■55426 / inTopicNo.3)  Re[2]: ConnectionからTransactionを知る方法
□投稿者/ furu (12回)-(2010/12/01(Wed) 14:47:04)
No55425 (shu さん) に返信
> ■No55423 (furu さん) に返信
> コネクションに対しトランザクションが1つとは限らないので無理でしょう。

返信ありがとうございます。

Oracle等では、並列トランザクションをサポートしておらず、
コネクションに対しトランザクションが1つなので可能だと思っています。

実際には、トランザクションリスト(or 配列)なるものが取得できれば
1つであることを確認し、使用したいと思っています。

例:
  void InsertData(
          DbConnection    Conn,
          DbTransaction   Tran)
  {
      using (DbCommand Comm = Conn.CreateCommand())
      {
          Comm.Transaction = Tran;
          Comm.CommandText = "insert into a values(5)";
          Comm.ExecuteNonQuery();
      }
  }

  【やりたい事】
  void InsertData(
          DbConnection    Conn)
  {
      using (DbCommand Comm = Conn.CreateCommand())
      {
          if (Comm.TransactionList.Count != 1)
              throw null;
  
          Comm.Transaction = Comm.TransactionList[0];
          Comm.CommandText = "insert into a values(5)";
          Comm.ExecuteNonQuery();
      }
  }

引用返信 編集キー/
■55453 / inTopicNo.4)  Re[3]: ConnectionからTransactionを知る方法
□投稿者/ shu (215回)-(2010/12/02(Thu) 16:34:13)
No55426 (furu さん) に返信

そういうメンバーが用意されていないので
前回も書きましたがラッパークラスを作る必要があるかと思います。

トランザクション制御のSQL文を直接実行すればTransactionオブジェクトの
ことは考えなくてもいいかもしれません。

引用返信 編集キー/
■55482 / inTopicNo.5)  Re[4]: ConnectionからTransactionを知る方法
□投稿者/ furu (13回)-(2010/12/03(Fri) 12:15:26)
No55453 (shu さん) に返信
> ■No55426 (furu さん) に返信
>
> そういうメンバーが用意されていないので
> 前回も書きましたがラッパークラスを作る必要があるかと思います。
>
shuさん、了解致しました。

エラーになるので、誰かは知っているんだろうけど
そういうメンバーが用意されていないということで
解決済とします。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -