C# で SQLite を使う (Windows)

前回はPHPSQLite を扱う方法をご紹介しました。今回は、 C#SQLite を扱う方法をご紹介したいと思います。
Visual Studio 2017 を使用します。

Visual Studio での依存ライブラリの管理は NuGet が便利です。NuGet を使って、SQLite に必要なパッケージをインストールします。

f:id:venturenet:20180511134756p:plain

パッケージマネージャが開いたら 参照 を選択して "SQLite" と打ち込んで検索し、検索結果から System.Data.SQLite.Core を選択してインストールします。

f:id:venturenet:20180511134842p:plain

準備はこれだけです。

コードも簡単です。まずはデータベースファイルを開きます。
ファイル名を指定すればOKです。

using (var conn = new SQLiteConnection("Data Source=C:\\temp\\db.sqlite"))
{
    conn.Open();


SQL文は、コマンドを作成して設定します。

using (SQLiteCommand command = conn.CreateCommand())
{
    command.CommandText = "SELECT * FROM some_table WHERE id=:id";
    // プレースホルダのバインドはこのように
    command.Parameters.Add("id", System.Data.DbType.String).Value = "hoge";


結果の1行を、キーをカラム名、値はすべて文字列の Dictionary で取得する場合は、以下のようにできます。

using (var reader = command.ExecuteReader())
{
    var schemaTable = reader.GetSchemaTable();
    
    while (reader.Read())
    {
        var row = new Dictionary<string, string>();

        foreach (DataRow schemaRow in schemaTable.Rows)
        {
            var columnName = schemaRow[schemaTable.Columns["columnName"]].ToString();
            row.Add(columnName, reader[columnName].ToString());
        }
    }
}



環境や構成によっては、"DLL 'SQLite.Interop.dll' を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)" といったエラーが出る場合があります。 この場合は、<ソリューションのルート>\packages\System.Data.SQLite.Core.<バージョン>\build\<.NETバージョン>\<プロセッサアーキテクチャ> フォルダの下にある SQLite.Interop.dll を実行ファイルがある場所にコピーして置くと動作するかもしれません。
.NETバージョンとプロセッサアーキテクチャは適切なものを選択してください。例えば .NET 4.6 の x86 であれば、build\net46\x86 の中にあるものを使います。


このように簡単に SQLite を使用することができますが、ここでご紹介した機能はごくごく一部です。
System.Data.SQLite についてのより深い情報を知りたい場合は こちら から。