2007年08月19日

[C#]データベースに接続する方法

マイクロソフトのプログラミング言語では、データベースに接続するときはADOで接続するものかと思ってたんだけど。
C#というか、Visual Studio 2005では、また新たな接続方法になっていた。
C#の統合環境ソフト上で、いろいろ設定しても使えるのだが。
それだと、プログラムから動的に設定変更するのが困難になるので。
プログラムからデータベースに接続する方法を試してみた。
たとえば、db1.mdbというAccessのデータベースに接続し、select * from t1というSQL文で表を取得するには、

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb");
OleDbCommand sql = conn.CreateCommand();
OleDbDataAdapter adapter = new OleDbDataAdapter(sql);
OleDbCommandBuilder Builder = new OleDbCommandBuilder(adapter);
DataTable dt = new DataTable();
sql.CommandText = "select * from t1";
adapter.Fill(dt);

こんな感じ。
結果のテーブルは、DataTableというオブジェクトで返される。
Visual Studio 2005のDataGridView(データを表形式で表示するコンポーネント)などで表示するには、このDataTableでなければならない。
ただし、このDataTableは、データベースから読み込んだコピーのデータなので、変更してもデータベースには反映されない。
一応、OleDbDataAdapterのUpdateメソッドで更新できるのだが。。。いろいろと問題があるようで。
結局は、DataTableの変更点から、自分でsql文を発行した方がよさそうである。
DataTableには、変更・追加・削除などが分かる仕組みは、用意されているので。
たとえば、DataTable dtの変更内容をテーブルt1に反映させるには、

string sql;
foreach (DataRow row in dt.Rows) {
switch (row.RowState) {
case DataRowState.Added:
sql = "INSERT INTO t1 (f1) VALUES (" + row["f1"] + ")";
break;
case DataRowState.Deleted:
sql = "DELETE FROM t1 WHERE ID=" + row["ID"];
break;
case DataRowState.Modified:
sql = "UPDATE t1 SET f1=" + row["f1"] + " WHERE ID=" + row["ID"];
break;
}
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb");
OleDbCommand myCommand = new OleDbCommand(sql);
myCommand.Connection = conn;
conn.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();

とまあ、こんな感じかな。

同じカテゴリー(電算術)の記事画像
携帯(803T)メモリ増設
無料通話かを知りたい!
ノートPCの修復
サーバー操作不能!?

同じカテゴリー(電算術)の記事
 [C#]一つのウィンドウ内で画面を切り替える方法 (2007-08-14 15:46)
 携帯(803T)でOpera Mini (2007-04-20 15:43)
 携帯(803T)ムービーの赤外線転送 (2007-04-15 02:20)
 携帯(803T)着うた事情 (2007-04-05 16:03)
 携帯(803T)用動画の作成 (2007-04-02 17:53)
 携帯(803T)メモリ増設 (2007-04-02 16:53)

 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。