『C#でDBを操作する』は、今回が最終回です。
これまでに、DBへの接続から読込、そして各種更新系の説明をしてきましたが、今回は、トランザクションについての説明をして行きたいと思います。
まず、下記のようなテーブルが2つあったとします。
テーブル名: t_tanka
| 番号 (i_nbr) | 名称 (i_nme) | 単価 (i_tnk) |
| 1 | コーヒー | 150 |
| 3 | 緑茶 | 120 |
| 4 | ミネラル・ウォーター | 100 |
テーブル名: t_zaiko
| 番号 (i_nbr) | 在庫数 (i_zik) |
| 1 | 50 |
| 3 | 30 |
| 4 | 60 |
入荷した商品
| 番号 (i_nbr) | 名称 (i_nme) | 単価 (i_tnk) | 数量 (i_suu) |
| 5 | ウーロン茶 | 120 | 40 |
ここで、新た入荷した商品は t_tanka 及び t_zaiko の両方のテーブルに登録されておりません。
従って、入荷した商品のデータを t_tanka 及び t_zaiko の両方に登録する必要があります。
注意) なんらかの不具合が起こった場合に、片方だけ登録されてはいけないものとします。
こんな時には、トランザクションを使用すると良いでしょう。
トランザクションとは、簡単に言いますと『関連する処理を一つにまとめたもの』のことです。
以下は、データ挿入のコーディングサンプルです。
// DBコネクション定義 |
順をおって見ていきましょう。
1) トランザクションを開始
dt = dbc.BeginTransaction();
2) 単価テーブルへのデータ挿入
String strSQL1 = "Insert Into t_tanka(i_nbr, i_nme, i_tnk) Values(5, \"ウーロン茶\", 120) ";
dc1 = new OleDbCommand(strSQL1, dbc);
if (dc1.ExecuteNonQuery() == 1) {
・・・
} else {
・・・
}
3) 上記 2) の処理が正常に行われたら在庫テーブルへデータを挿入
String strSQL2 = "Insert Into t_zaiko(i_nbr, i_zik) Values(5, 40) ";
dc2 = new OleDbCommand(strSQL2, dbc);
if (dc2.ExecuteNonQuery() == 1) {
・・・
} else {
・・・
}
4) 上記 2) から 3) の処理が正常に行われたらデータの確定
dt.Commit();
トランザクション.Rollback()
トランザクション開始した状態に巻き戻すことができます。
トランザクション.Commit()
挿入や更新,削除処理などで行われた結果を確定します。
※ 表示の都合上『¥』記号が『\』になっておりますが実際には半角の¥記号になります。