MDB(Access形式)操作の最近のブログ記事

<<前回の記事>>

『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コネクション定義
OleDbConnection dbc;

// トランザクション定義
OleDbTransaction dt;

// DBコマンド定義
OleDbCommand dc1;
OleDbCommand dc2;

// DB接続パラメータ設定
String strDBConnection = "Provider=Microsoft.Jet.OLEDB.4.0"
  + ";Data Source=sample.mdb"
  + ";Password=\"\""
  + ";User ID=Admin";

// DB接続
try {
  // DBコネクション作成
  dbc = new OleDbConnection(strDBConnection);

  // DBコネクションを開く
  dbc.Open();
} catch (Exception ee) {
  MessageBox.Show("DB Connection を確立できませんでした");
  return;
}

// トランザクション開始
dt = dbc.BeginTransaction();

// 単価テーブルへのデータを挿入するためのクエリー作成
String strSQL1 = "Insert Into t_tanka(i_nbr, i_nme, i_tnk) Values(5, \"ウーロン茶\", 120) ";

try {
  // DBコマンド作成
  dc1 = new OleDbCommand(strSQL1, dbc);

  // Insert Query を実行
  if (dc1.ExecuteNonQuery() == 1) {
    // 在庫テーブルへのデータを挿入するためのクエリー作成
    String strSQL2 = "Insert Into t_zaiko(i_nbr, i_zik) Values(5, 40) ";

    try {
      // DBコマンド作成
      dc2 = new OleDbCommand(strSQL2, dbc);

      if (dc2.ExecuteNonQuery() == 1) {
      } else {
        // 巻き戻し処理
        dt.Rollback();

        MessageBox.Show("在庫テーブルへの登録が失敗しました");
      }
    } catch {
      // 巻き戻し処理
      dt.Rollback();

      MessageBox.Show("Insert Query が正常に実行されませんでした(2)");
    }
   } else {
    // 巻き戻し処理
    dt.Rollback();

    MessageBox.Show("単価テーブルへの登録が失敗しました");
  }
} catch {
  // 巻き戻し処理
  dt.Rollback();

  MessageBox.Show("Insert Query が正常に実行されませんでした(1)");
}

// 挿入したデータを確定する
dt.Commit();

// DB接続を閉じる
dbc.Close();

順をおって見ていきましょう。

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()
  挿入や更新,削除処理などで行われた結果を確定します。

※ 表示の都合上『¥』記号が『\』になっておりますが実際には半角の¥記号になります。

<<前回の記事>>

今回は、データの削除について説明していきたいと思います。
勘の良い貴方、もうピンと来ているみたいですね。きっと、思っているとおりだと思いますが説明をいたします。

それでは、前回の説明で使用したテーブル(下記参照)のデータを削除してみましょう。


テーブル名: t_tanka

番号
(i_nbr)
名称
(i_nme)
単価
(i_tnk)
1 コーヒー 150
2 ミルクティー 120
3 緑茶 120
4 ミネラル・ウォーター 100

 

削除するデータ

番号
(i_nbr)
名称
(i_nme)
単価
(i_tnk)
2 ミルクティー 120

以下は、データ挿入のコーディングサンプルです。

// DBコネクション定義
OleDbConnection dbc;

// DBコマンド定義
OleDbCommand dc;

// DB接続パラメータ設定
String strDBConnection = "Provider=Microsoft.Jet.OLEDB.4.0"
  + ";Data Source=sample.mdb"
  + ";Password=\"\""
  + ";User ID=Admin";

// DB接続
try {
  // DBコネクション作成
  dbc = new OleDbConnection(strDBConnection);

  // DBコネクションを開く
  dbc.Open();
} catch (Exception ee) {
  MessageBox.Show("DB Connection を確立できませんでした");
  return;
}

// データを削除するためのクエリー作成
String strSQL = "Delete From t_tanka Where i_nbr = 2 ";

try {
  // DBコマンド作成
  dc = new OleDbCommand(strSQL, dbc);

  // Insert Query を実行
  if (dc.ExecuteNonQuery() == 1) {
  } else {
    MessageBox.Show("データの削除が失敗しました");
  }
} catch {
  MessageBox.Show("Delete Query が正常に実行されませんでした");
}

// DB接続を閉じる
dbc.Close();

順をおって見ていきましょう。

1) データ削除に必要なクエリを作成する。
  String strSQL = "Delete From t_tanka Where i_nbr = 2 ";

2) DBコマンドを作成する。
  dc = new OleDbCommand(strSQL, dbc);

3) クエリーを発行しデータの削除を行う。
  if (dc.ExecuteNonQuery() == 1) {
  } else {
    MessageBox.Show("データの削除が失敗しました");
  }

今回違いは・・・
思った通りだったと思いますが、クエリだけなんです。

※ 表示の都合上『¥』記号が『\』になっておりますが実際には半角の¥記号になります。

<<前回の記事>>


今回は、前回データの挿入について説明いたしましたので、データの更新について説明していきたいと思います。
前回の内容が理解できていれば、今回の内容はサラッと理解できてしまいます。

それでは、前回の説明で使用したテーブル(下記参照)のデータを更新してみましょう。


テーブル名: t_tanka

番号
(i_nbr)
名称
(i_nme)
単価
(i_tnk)
1 コーヒー 150
2 紅茶 130
3 緑茶 120
4 ミネラル・ウォーター 100

 

更新するデータ

番号
(i_nbr)
名称
(i_nme)
単価
(i_tnk)
2 ミルクティー 120

以下は、データ挿入のコーディングサンプルです。

// DBコネクション定義
OleDbConnection dbc;

// DBコマンド定義
OleDbCommand dc;

// DB接続パラメータ設定
String strDBConnection = "Provider=Microsoft.Jet.OLEDB.4.0"
  + ";Data Source=sample.mdb"
  + ";Password=\"\""
  + ";User ID=Admin";

// DB接続
try {
  // DBコネクション作成
  dbc = new OleDbConnection(strDBConnection);

  // DBコネクションを開く
  dbc.Open();
} catch (Exception ee) {
  MessageBox.Show("DB Connection を確立できませんでした");
  return;
}

// データを更新するためのクエリー作成
String strSQL = "Update t_tanka Set i_tnk = 120, i_nme = \"ミルクティー\" Where i_nbr = 2 ";

try {
  // DBコマンド作成
  dc = new OleDbCommand(strSQL, dbc);

  // Insert Query を実行
  if (dc.ExecuteNonQuery() == 1) {
    } else {
    MessageBox.Show("データの削除が失敗しました");
  }
} catch {
  MessageBox.Show("Delete Query が正常に実行されませんでした");
}

// DB接続を閉じる
dbc.Close();

順をおって見ていきましょう。

1) データ挿入に必要なクエリを作成する。
  String strSQL = "Update t_tanka Set i_tnk = 120, i_nme = ・・・";

2) DBコマンドを作成する。
  dc = new OleDbCommand(strSQL, dbc);

3) クエリーを発行しデータの挿入を行う。
  if (dc.ExecuteNonQuery() == 1) {
  } else {
    MessageBox.Show("データの更新が失敗しました");
  }

今回の例をみてもらうと分かると思うのですが、前回の挿入との違いはクエリだけなんです。

※ 表示の都合上『¥』記号が『\』になっておりますが実際には半角の¥記号になります。
 

 

<<前回の記事>>


今回の「C#でDBを操作する」は、前回データの読込について説明いたしましたので、データの挿入について説明していきたいと思います。
データの挿入方法が、理解できてしまえば、この後に続く「更新」及び「削除」が楽に理解できると思います。

それでは、前回の説明で使用したテーブル(下記参照)にデータを挿入してみましょう。

テーブル名: t_tanka

番号
(i_nbr)
名称
(i_nme)
単価
(i_tnk)
1 コーヒー 150
2 紅茶 130
3 緑茶 120

 

挿入するデータ

番号
(i_nbr)
名称
(i_nme)
単価
(i_tnk)
4 ミネラル・ウォーター 100

以下は、データ挿入のコーディングサンプルです。

// DBコネクション定義
OleDbConnection dbc;

// DBコマンド定義
OleDbCommand dc;

// DB接続パラメータ設定
String strDBConnection = "Provider=Microsoft.Jet.OLEDB.4.0"
  + ";Data Source=sample.mdb"
  + ";Password=\"\""
  + ";User ID=Admin";

// DB接続
try {
  // DBコネクション作成
  dbc = new OleDbConnection(strDBConnection);

  // DBコネクションを開く
  dbc.Open();
} catch (Exception ee) {
  MessageBox.Show("DB Connection を確立できませんでした");
  return;
}

// データを挿入するためのクエリー作成
String strSQL = "Insert Into t_tanka(i_nbr, i_nme, i_tnk) Values(4, "\"ミネラル・ウォーター\"", 100) ";
try {
  // DBコマンド作成
  dc = new OleDbCommand(strSQL, dbc);

  // Insert Query を実行
  if (dc.ExecuteNonQuery() == 1) {
  } else {
    MessageBox.Show("データの挿入が失敗しました");
  }
} catch {
  MessageBox.Show("Insert Query が正常に実行されませんでした");
}

// DB接続を閉じる
dbc.Close();

順をおって見ていきましょう。

1) データ挿入に必要なクエリを作成する。
  String strSQL = "Insert Into t_tanka(i_nbr, i_nme, i_tnk) ・・・";

2) DBコマンドを作成する。
  dc = new OleDbCommand(strSQL, dbc);

3) クエリーを発行しデータの挿入を行う。
  if (dc.ExecuteNonQuery() == 1) {
  } else {
    MessageBox.Show("データの挿入が失敗しました");
  }

ExecuteNonQuery() と言うのは、DBコマンドのメソッドであり、クエリを実行し、その処理件数を返します。
このメソッドは、この後でも使用しますのでしっかりと覚えておいて下さい。

※ 表示の都合上『¥』記号が『\』になっておりますが実際には半角の¥記号になります。

<<前回の記事>>

C#でDBを操作するも3回目になりました。
前回までの、内容はDBを操作する前提として必要なことを説明いたしましたが、今回からは、いよいよ本題となるDBの操作へと入ってゆきます。

それでは、今回はDB内のテーブルからデータを取り出す(抽出)についての説明をしてゆきます。

以下のようなテーブルがあったとします。
テーブル名: t_tanka

番号
(i_nbr)
名称
(i_nme)
単価
(i_tnk)
1 コーヒー 150
2 紅茶 130
3 緑茶 120

 

以下は、データ読込のコーディングサンプルです。

// DBコネクション定義
OleDbConnection dbc;

// DBコマンド定義
OleDbCommand dc;

// データ・リーダー定義
OleDbDataReader ddr;

// DB接続パラメータ設定
String strDBConnection = "Provider=Microsoft.Jet.OLEDB.4.0"
  + ";Data Source=sample.mdb"
  + ";Password=\"\""
  + ";User ID=Admin";

// DB接続
try {
  // DBコネクション作成
  dbc = new OleDbConnection(strDBConnection);

  // DBコネクションを開く
  dbc.Open();
} catch (Exception ee) {
  MessageBox.Show("DB Connection を確立できませんでした");
  return false;
}

// データを抽出するためのクエリー作成
String strSQL = "Select i_nbr, i_nme, i_tnk From t_tanka ";

// クエリー発行&データ・リーダー作成
try {
  dc = new OleDbCommand(strSQL, dbc);
  ddr = dc.ExecuteReader();
} catch {
  ddr.Close();
  MessageBox.Show("Queryコマンドが正常に処理されませんでした");
  return false;
}

// データの有無を確認
if (ddr.HasRows == false) {
  ddr.Close();
  MessageBox.Show("テーブルにデータがありませんでした");
  return false
}

// データが無くなるまで読込を行う
Int32 i_nbr = 0;    // <= 番号
String i_nme = "";  // <= 名称
Decimal i_tnk = 0;  // <= 単価
while (ddr.Read()) {
  // 番号がヌルか確認
  if (ddr.IsDBNull(0) == true) {
    i_nbr = 0;
  } else {
    i_nbr = ddr.GetInt32(0);  // Int32 型のフィールドの取得
  }

  // 名称がヌルか確認
  if (ddr.IsDBNull(1) == true) {
    i_nme = 0;
  } else {
    i_nme = ddr.GetString(1);  // String 型のフィールドの取得
  }

  // 単価がヌルか確認
  if (ddr.IsDBNull(2) == true) {
    i_tnk = 0;
  } else {
    i_tnk = ddr.GetDecimal(2);  // Decimal 型のフィールドの取得
  }
}

// データ・リーダーを閉じる
ddr.Close();

dbc.Close();

順をおって見ていきましょう。

1) 読込に必要な定義を行う。
  OleDbCommand dc;
  OleDbDataReader ddr;

2) 読込(抽出)を行うためのクエリーの作成
  String strSQL = "Select i_nbr, i_nme, i_tnk From t_tanka ";

3) クエリー・コマンドを発行しデータ・リーダーを作成する
  dc = new OleDbCommand(strSQL, dbc);
  ddr = dc.ExecuteReader();

4) データの有無を確認
  if (ddr.HasRows == false) {
  }
  ※ ddr.HasRows は、データの有無を判別できる、データ・リーダーのプロパティです

5) データが無くなるまで読込む
  while (ddr.Read()) {
    // 番号がヌルか確認
    if (ddr.IsDBNull(0) == true) {
      i_nbr = 0;
    } else {
      i_nbr = ddr.GetInt32(0);
    }
  }
  ※ ヌルデータを代入するとエラーになりますのでチェックが必要です

6) データ・リーダーを閉じる
  ddr.Close();


※ 表示の都合上『¥』記号が『\』になっておりますが実際には半角の¥記号になります。

 

 

<<前回の記事>>


C#でDBを操作するの第2回目となる今回は「DB接続を閉じる(終了)」について説明したいと思います。

DBの接続を閉じるのは至って簡単で、接続するより楽ですw
とは言え、DB接続してそのままにしておくと、世の中何が起こるか判りませんので、接続したDBは、きちんと閉じましょう。


では、実際にはどのように行うのか例で見ていきましょう。

// DB接続定義
OleDbConnection dbc;

// DB接続パラメータ設定
String strDBConnection = "Provider=Microsoft.Jet.OLEDB.4.0"
  + ";Data Source=sample.mdb"
  + ";Password=\"\""
  + ";User ID=Admin";

// DB接続
try {
  // DBコネクション作成
  dbc = new OleDbConnection(strDBConnection);

  // DBコネクションを開く
  dbc.Open();
} catch (Exception ee) {
  MessageBox.Show("DB Connection を確立できませんでした");
}

// DBコネクションを閉じる
dbc.Close();
 

前回の、DB接続のコーディングとよく似ていますが、1点違いがあります。

そうなんです!!
1行前回より増えているんです。

dbc.Close();
↑↑ このメソッドでDB接続を閉じる

たった、これだけの事なのです。

※ 表示の都合上『¥』記号が『\』になっておりますが実際には半角の¥記号になります。

今回は、記念すべき第一回となります。
(^-^)//"" パチパチ ★祝福の大砲!☆(ノ^o^)♂ドド-ン

これから何回かに渡ってC#でDB(データベース)を操作する方法を例をもとに解説していきたいと思います。(とか言って自分の備忘録だったりしてw)
今回は、DBへの接続について説明していきたいと思います。

C#でなく、あらゆるプログラミング言語について言えるのですが、DBを利用する際に、最初にしなければならないことがあります。
それは、DBへの接続(Connection)です。
これを、やらないと何も始まりません。

DBへ接続して開く
↓↓
DBのデータを読んだり書いたり
↓↓
DB接続を閉じる(終了する)
簡単に書くとこんな処理手順になります。

では、実際にはどのように接続を行うのか例で見ていきましょう。

 using System.Data.OleDb;

 

// DB接続定義
OleDbConnection dbc;

// DB接続パラメータ設定
String strDBConnection = "Provider=Microsoft.Jet.OLEDB.4.0"
  + ";Data Source=sample.mdb"
  + ";Password=\"\""
  + ";User ID=Admin";

// DB接続
try {
  // DBコネクション作成
  dbc = new OleDbConnection(strDBConnection);

  // DBコネクションを開く
  dbc.Open();
} catch (Exception ee) {
  MessageBox.Show("DB Connection を確立できませんでした");
}

まず2行目で、使用するDBコネクションの定義を行っています。
OleDbConnection dbc;

5~8行目でDBへ接続するためのパラメータを設定しているのですが、このパラメータの説明をしておきましょう。
Provider=Microsoft.Jet.OLEDB.4.0
↑↑ Microsoft Access 形式のDBを使用する場合の決まり文句
Data Source=sample.mdb
↑↑ DBのファイルを指定します(ここでは例として「sample.mdb」としています)
Password=\"\"
↑↑ パスワード(Microsoft Access 形式のDBの場合は空でOK)
User ID=Admin
↑↑ ユーザーID(Microsoft Access 形式のDBはAdminを指定)

dbc = new OleDbConnection(strDBConnection);
↑↑ これでDBへの接続を行っていますが単純に接続しているだけです

dbc.Open();
↑↑ これは、上で行った接続を開いています(2行で1セットと思った方が早いでしょう)

DBへの接続そのものは、ややこしいことではありません。
DBのファイル名を変える程度で、あとは、決まり事を行うだけのようなものですので^^;

今回は、接続に関して説明しましたが、接続しただけではプログラム上でなんの変化もありません。しかし、DBを操作するには、これを必ず最初にやらなくてはなりません。

※ 表示の都合上『¥』記号が『\』になっておりますが実際には半角の¥記号になります。

 

2009年12月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

リンク

相互リンク

あわせて読みたいブログパーツ