【c#】DataAdapterを使ってデータベースを操作する方法

C#

OleDbDataAdapterを使ってデータベースを参照及び編集する方法を紹介します。
APIはOLE DBを使っています。

DataAdapterを使えば、最初にSELECTを含むSQL文だけ入力し、その後はSQL文をソースコードに入力せずにデータベースの更新や参照をすることができます。
SQL文の扱いが不慣れな方にプロジェクトに入ってもらうときなどには、DataAdapterを使う方法を紹介するといいのではないかと思います。

SQL文を用いてデータベースを操作する方法は【c#,vb】データベースを操作する方法で紹介しています。

ここで紹介する方法はSQLServerに対して操作できることを確認しています。その他のデータベースに対して操作できることは確認しておりません。

接続文字列

SQLServerのデータベースファイルを操作するための接続文字は下記となります。

"Provider=SQLOLEDB;Data Source={インスタンス名を入力する}; Initial Catalog={データべース名を入力する(拡張子は不要)};Integrated Security={認証の種類を入力する。Windows認証の場合は"SSPI"でよい。};"

データベースの参照

データベースを参照するサンプルです。

System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection("{ここへ接続文字列を入力する}");
System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter("{ここへSELECTを扱うSQLを入力する}", cn);
System.Data.DataTable dt = new System.Data.DataTable();

da.Fill(dt);

//各行の1列目~4列目を参照する。
foreach (System.Data.DataRow row in dt.Rows)
{
    row[0].ToString();
    row[1].ToString();
    row[2].ToString();
    row[3].ToString();
}

データベースの更新

データベースを更新するサンプルを紹介します。
トランザクションも実装しています。

  • テーブルに主キーが設定されていない場合はエラーが発生します。
  • テーブルを結合した結果に対して更新することはできません。
テーブルに主キーが設定されていないときのエラー
テーブルを結合した結果に対して更新しようとしたときのエラー
System.Data.DataTable dt = new System.Data.DataTable();

System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection("{ここへ接続文字列を入力する}");
System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter("{ここへSELECTを扱うSQLを入力する}", cn);
System.Data.OleDb.OleDbCommandBuilder cb = new System.Data.OleDb.OleDbCommandBuilder(da);

cn.Open();

System.Data.OleDb.OleDbTransaction tr = cn.BeginTransaction();
da.SelectCommand.Transaction = tr;

da.Fill(dt);

try
{
    //更新↓のような記述で1行目2列目の値を更新する。
    dt.Rows[0][1] = "{ここに更新したい値を入力する。}";

    //追加
    dt.Rows.Add("{ここに各列の値をカンマ(,)区切りで入力する。}");

    //削除↓のような記述で1行目を削除する。
    dt.Rows[0].Delete();

    da.Update(dt);

    tr.Commit();

}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
    tr.Rollback();
}
finally
{
    cn.Close();
}

以上となります。
参考になれば幸いです。

タイトルとURLをコピーしました