2013年11月26日火曜日

C# SQLiteDataAdapterでUpdate

ぼちぼちSQLiteにも慣れたような気のせいのような。
Select文で取ってきたデータを処理する方法として、
SQLiteはSQLiteDataReaderを使う方法と、SQLiteDataAdapterを使う方法がある。
今回は、後者で取ってきたDataTableをいじったから
もとのデータベースに反映させたいよう、というお話。

基本的な流れ


参考サイト

SQLiteDataAdapterのUpdateメソッドにDataTableを渡せばよいとな?

/*---------------------------------------------------------------------------*/
// hoge.dbに接続
SQLiteConnection conn = new SQLiteConnection("hoge.db");
conn.open();

// fugaテーブルのデータを取ってくる
SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from fuga", conn );
DataTable data = new DataTable();
adapter.Fill(data);

// なんかデータテーブルをいじる

// 更新
adapter.Update(data);
/*---------------------------------------------------------------------------*/

で、ほんともう単純にやってみたら例外吐かれた。
なんでも「有効なUpdateCommandがないわよ。ばかね」だそうで。

SQLiteCommandBuilderでコマンドを自動生成する


参考サイト

テーブルごとに有効なコマンドを自分で設定するのなんて正気の沙汰じゃない。
そもそもそれなら自分でデータベースを直でいじるわい、と思っていたら、
自動生成してくれるクラスがあった。

/*---------------------------------------------------------------------------*/
SQLiteCommandBuilder bulider = new SQLiteCommandBuilder(adapter);
adapter.Update(data);
/*---------------------------------------------------------------------------*/

たったこれだけで勝手に各種コマンドを自動生成してくれるそうで。大助かり。
これでSQLiteDataAdapter を使ってのデータベース更新ができるようになった。

補足:PRIMARY KEYの設定


データベースのKEYの設定をちゃんとしていないと、SQLiteCommandBuilderで実は怒られる。
更新時のWHERE句の指定でプライマリキーを使用するのだと思う。多分。
ちゃんと設定してあげよう。

1 件のコメント: