|
分類:[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(); }
ご教授よろしくお願いします。
|