C#メモ データベースをファイルで管理するSQLiteをDLLを読み込んで動かしてみる
データベースが使いたいけど、データベース自体はファイルで持っておきたい…。
Accessがバッチシ!だと思ってたんだけど、Accessはテーブルの列数が最大で255列っていう制限がある。
Office 2010あたりでExcel 2010は列数が255列以上扱えるのに…Accessは255文字の制限があるのは謎…。
で、調べてみたらSQLiteなるものがあるって事で試すことに。
こなあたりが、使ってみようと思ったとこ。
- とにかくフリー(商用でもOKだそうな)
- メモリの限り?列を増やせる
- データベースをファイルで管理する
今回はSQLiteのメソッドをC#で呼び出せるまで。
処理としてはこんな感じ。
- sqlite3_openでデータベースを開く(新規作成する)
- sqlite3_closeでデータベースを閉じる
まずは、SQLiteのDLLをダウンロードしとく。
- ブラウザで次のサイトを開く。
http://www.sqlite.org/ - ページの上の方にあるメニューのうちで"Download"ってリンクをクリックする。
- “SQLite Download Page"ってページが開くので、下の方にスクロールしていって…
“Precompiled Binaries for Windows"って項目のとこにある"sqlite-dll-win32-x86-XXXXXX.zip"ってリンクをクリックする。
※XXXXXXは数字
- ダウンロードしていいか聞いてくるので、ダウンロードする。
※ブラウザによってダウンロードの方法が違うので注意(ちなみに、ここではFirefoxの場合)
- ダウンロードしたら圧縮ファイルを展開する。
- 展開したらsqlite3.dllとsqlite3.defってファイルがでてくる。
これを適当なフォルダを作って、とっておく。
んで、コード。
DLLを読み込むためのnamespaceを定義しておく。
using System.Runtime.InteropServices;
次にSQLiteのDLLに入ってるメソッドをC#で使えるようにするクラスを定義。
class SQLite { // SQLiteの処理ステータスを定義 public enum Result : int { Normal = 0, // 正常終了 Faild = 1, // エラー終了 Done = 101 // 処理終了 } // データベース(ファイル)を開く [DllImport("sqlite3.dll", EntryPoint = "sqlite3_open")] public static extern Result Open(string filename, out IntPtr database); // データベース(ファイル)を閉じる [DllImport("sqlite3.dll", EntryPoint = "sqlite3_close")] public static extern Result Close(IntPtr database); }
んで、実際にSQLiteを動かすコード。
static void Main(string[] args) { SQLite.Result result = SQLite.Result.Faild; // 処理ステータス IntPtr database = IntPtr.Zero; // データベース try { string filename = "database.sqlite"; // データベース(ファイル)名 // DBファイルを開く result = SQLite.Open(filename, out database); if (result != SQLite.Result.Normal) { throw new Exception("Open() is faild."); } } catch (Exception ex) { System.Console.WriteLine(ex.Message); } finally { // DBファイルを閉じる if (database != IntPtr.Zero) { SQLite.Close(database); } System.Console.WriteLine("finished"); } }
で、一回コンパイルした上で、exeのあるフォルダにsqlite3.dllとsqlite3.defをコピーする。
んで、動かしてみるとこんな感じ。
exeのあるフォルダを開いてみると、コードに書いてたデータベース名のファイルができてる。
ちなみに、デバッグ実行(F5)すると、2回目からこんな警告が…。
※CtrlキーとF5を同時に押して実行すると大丈夫っぽい。
ん~、わからん。
そのうち、調べてみよっと…。
あと…DLLはコンパイルするときにコピーしたいな…。
そんなこんなで、メモってことで。
ディスカッション
コメント一覧
まだ、コメントがありません