データベースが使いたいけど、データベース自体はファイルで持っておきたい…。
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はコンパイルするときにコピーしたいな…。
そんなこんなで、メモってことで。



