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();
とまあ、こんな感じかな。
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();
とまあ、こんな感じかな。
[C#]一つのウィンドウ内で画面を切り替える方法
携帯(803T)でOpera Mini
携帯(803T)ムービーの赤外線転送
携帯(803T)着うた事情
携帯(803T)用動画の作成
携帯(803T)メモリ増設
携帯(803T)でOpera Mini
携帯(803T)ムービーの赤外線転送
携帯(803T)着うた事情
携帯(803T)用動画の作成
携帯(803T)メモリ増設
Posted by やま104 at 01:30│Comments(0)
│電算術