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

わんくま同盟

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

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


(過去ログ 49 を表示中)
■26548 / )  DBの連続更新でエラー時rollbackがされない
□投稿者/ ありあり (8回)-(2008/10/14(Tue) 11:34:49)

分類:[C#] 


VisualStudio2005 C#,OS windowsXPで開発しています。

トランザクションを使用して、ループ内で連続でsql(いずれもUPDATE文)を発行し、
エラーのあった場合はロールバックをさせたいと思っています。

ArrayList updateSql = new ArrayList();
updateSql.Add(UpdateSql1); update文1(正常)
updateSql.Add(UpdateSql2); update文2(エラーを含む)

IDbCommand comm = conn.CreateCommand();
IDbTransaction trn = conn.BeginTransaction();
comm.Transaction = trn;
foreach (string sql in updateSql) {

comm.CommandText = sql;
try {
ret_cd = comm.ExecuteNonQuery();
} catch(Exception ex) {
trn.Rollback();
break;
}
}

今起こっている現象は、update文1の後、update文2を実行してエラーの為にrollbackするのですが、
先に実行したupdate文1が勝手にコミットされてしまうようで、rollbackされないのです。
後に実行したupdate文2はrollbackされています。

ループでSQLを実行するという方法が悪いのでしょうか。
ループを使わないとするならば以下のようになると思います。


IDbCommand comm = conn.CreateCommand();
IDbTransaction trn = conn.BeginTransaction();
comm.Transaction = trn;
          try {
comm.CommandText = UpdateSql1;
ret_cd = comm.ExecuteNonQuery();
comm.CommandText = UpdateSql2;
ret_cd = comm.ExecuteNonQuery();
} catch(Exception ex) {
trn.Rollback();
}

ご教授よろしくお願いします。
返信 編集キー/


管理者用

- Child Tree -