tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルトランザクション
記事No7898
投稿日: 2008/08/01(Fri) 10:33
投稿者はれ
トランザクション実装方法の質問です。

MSDNには
ADO.NET では、Connection オブジェクトを使用してトランザクションを制御します。
と書かれていることから

cn.open
myTran = cnt.BeginTransaction(IsolationLevel.ReadCommitted)

DO Until XXX

 ここでテーブルの更新を行っています。  
 da = New OleDbDataAdapter(StrSQL, cn)’ここでデータアダプタは常に初期化されています。
 da.SelectCommand.Transaction = myTran
 da.Fill(ds, "MyTable")
 「データ内容調査を実行 更新 新規 データ値など」で処理分岐


 cmdBuil.DataAdapter = da
 da.InsertCommand = cmdBuil.GetInsertCommand
 da.InsertCommand.Transaction = myTran
 da.Update(ds, "MyTable")
 や、インサート デリート の処理実行。

Loop
myTran.Commit
cn.close

と書いています。
ここで疑問なのですが、
da(データアダプタ)がたまたま消え残っているのでうまくトランザクションが実装できているのか、
MSDNの記述どおり、トランザクションはコネクションが管理しているから
うまくいっているのか?がイマイチわかりません。
ご教授下さい。

[ツリー表示へ]
タイトルRe: トランザクション
記事No7902
投稿日: 2008/08/01(Fri) 14:40
投稿者るしぇ
コネクションクラスとトランザクションクラスのインスタンスが
保持されてるからじゃない?

例えばノートと鉛筆があって、色々なノートに鉛筆を使って
記入して、ノートを捨てたとしても、鉛筆を捨てない限り
新しいノートが用意されれば書くことが可能です。

ノートがデータアダプタ。鉛筆がコネクション。

[ツリー表示へ]
タイトルRe^2: トランザクション
記事No7906
投稿日: 2008/08/04(Mon) 10:53
投稿者はれ
では、先の記述(実装方法)で問題ないということでしょうか?

[ツリー表示へ]
タイトルRe^3: トランザクション
記事No7908
投稿日: 2008/08/04(Mon) 15:34
投稿者るしぇ
・誤字と思われるがコネクションが2つある。
・CommandBuilder でのコマンドの自動生成は、使用上の制限がある上に
無駄が多いので Insert 文を自前で編集することの方が多い。
・エラー発生時の対処が書かれていない。(特にトランザクションの話題
なのだから Rollback は欲しかった)
・たぶん、Loop で処理するような内容ではない。

ということを考慮に入れて、トランザクションを複数の更新処理で
使う質問用サンプルコードとしてはこれでいいと思います。

[ツリー表示へ]
タイトルRe^4: トランザクション
記事No7910
投稿日: 2008/08/05(Tue) 09:02
投稿者はれ
ありがとうございました。

[ツリー表示へ]