C#からSQLiteを使ってみた。
環境はVS2005とC#
SQLServerでデータのCRUDを行う際、SqlDataAdapterと型付データセットをウィザードを使って生成してたのですが
SQLiteで同じことやろうとしてはまりました。
接続用のライブラリにはこれを使いました。
http://sqlite.phxsoftware.com/
まずSQLiteのライブラリがデザイナに追加して使用できない。
これはODBC接続を使って、データセットの作成だけ行いました。
このときに、ウィザードで表示されるテーブル一覧には何も表示されませんが、テーブル名を直打ちすると読み込めました。
でもキー列が認識されない。。。テーブル数少なかったので手で設定しました。*1
でもこのままだとせっかくSQLite用のドライバがあるのに、ODBC経由での接続になってしまうんですよね。。。
文字列置換を使って全部SQLite用のドライバに変更してしまおうか迷ったのですが、デザイナが生成したコードをいじるとなんかあったときに面倒なので中止。
うんうんうなりながらMSDNのDataAdapterを眺めていたら発見しました。
。
DbCommandBuilderクラス
http://msdn2.microsoft.com/ja-jp/library/system.data.common.dbcommandbuilder(VS.80).aspx
Select文は書かないとだめそうですが、これでなんとかなりそうです。
あ、Update文作るときはテーブル定義も確認するので、キーとなる値がある場合は、ちゃんと制約つけておきましょう。
実際に動かしてみて、データが作られたことを確認。
当然ながらSelect句のパラメータなどは作ってくれないので、
パラメータクエリを使用する場合は、SelectCommandのParametersにAddしてあげる必要があります。
コードはこんな感じ
SQLiteConnection con = new SQLiteConnection(@"Data Source = C:\tmp\db;Version=3;Compress=True;New=True"); SQLiteDataAdapter sda = new new SQLiteDataAdapter("SELECT * FROM table_name WHERE col1 = @col1",con); sda.SelectCommand.Parameters.Add(new SQLiteParameter("@col1")); SQLiteCommandBuilder sdb = new SQLiteCommandBuilder(sda); sda.InsertCommand = sdb.GetInsertCommand(true); sda.UpdateCommand = sdb.GetUpdateCommand(true); sda.DeleteCommand = sdb.GetDeleteCommand(true);
もっとMSDNは読まないとだめですね。