【C#】SQLiteを使う

By | 2011年10月28日

今回はC#でSQLiteを使った簡単なWindowsFormsアプリケーションを作成してみる。
SQLiteはアプリケーションに組み込んで使う小型のデータベースで、Androidでは標準のAPIで扱えたりするのだが、C#では残念ながら標準のAPIで使うことは出来ない。
そこで、System.Data.SQLiteというライブラリを使うことにする。
このライブラリは以下のサイトから取得できる。
http://sqlite.phxsoftware.com/
このサイトからファイルをダウンロードし、解凍してセットアップするとセットアップフォルダの中にSystem.Data.SQLite.dllというファイルが見つかるだろう。
このライブラリファイルをVisualStudioのソリューション参照設定に追加する。
「ソリューションエクスプローラを右クリック」→「参照の追加」→参照タブを選択→ダウンロードしてきたSystem.Data.SQLite.dllを選択
で出来る。
次に、フォームに以下のようにボタンを配置する。

そして以下のようなコードを書いた。

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;

namespace SqliteLesson
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Createボタンのイベントハンドラ テーブルの作成とデータ追加
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            using (SQLiteConnection con = new SQLiteConnection("Data Source=sqlitelesson.db"))
            using (SQLiteCommand cmd = con.CreateCommand())
            {
                con.Open();

                // テーブル作成
                cmd.CommandText = "CREATE TABLE Lesson (ID INTEGER PRIMARY KEY, Name NVARCHAR(128), Age INTEGER)";
                cmd.ExecuteNonQuery();

                // データ追加
                cmd.CommandText = "INSERT INTO Lesson (Name,Age) VALUES('Tom',43)";
                cmd.ExecuteNonQuery();

                cmd.CommandText = "INSERT INTO Lesson (Name,Age) VALUES('John',29)";
                cmd.ExecuteNonQuery();

                cmd.CommandText = "INSERT INTO Lesson (Name,Age) VALUES('Mike',35)";
                cmd.ExecuteNonQuery();
            }
        }

        /// <summary>
        /// Selectボタンのイベントハンドラ テーブルの内容を表示
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param
        private void button2_Click(object sender, EventArgs e)
        {
            using (SQLiteConnection con = new SQLiteConnection("Data Source=sqlitelesson.db"))
            using (SQLiteCommand cmd = con.CreateCommand())
            {
                con.Open();

                cmd.CommandText = "SELECT * FROM Lesson";
                using (SQLiteDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Console.WriteLine("ID:" + reader[0] + " Name:" + reader[1] + " Age:" + reader[2]);
                    }
                }
            }
        }
    }
}

Createボタンを押すとテーブル作成とデータ追加を行い、Selectボタンを押すとテーブル内容をコンソールに表示するプログラムである。
さて、しかしこのままプログラムを実行しCreateボタンを押すと以下のような例外が出て落ちてしまう。

「混合モード アセンブリはバージョン ‘v2.0.50727’ のランタイムに対して作成されており、追加の構成情報がないと 4.0 ランタイムでは読み込めません。」

この問題に対処する方法は2つある。1つめはアプリケーションの対象フレームワークを2.0にする方法である。
VisualStudioのソリューションエクスプローラーから、ソリューションフォルダを右クリックして「プロパティ」を選択し、次にアプリケーションタブを選択する。そして対象のフレームワークコンボボックスで「.NETフレームワーク2.0」を選べばよい。しかしこの方法だとせっかくの.NET4.0の機能が使えなくなってしまう。

もう一つの方法はアプリケーション構成ファイルを追加する方法である。
VisualStudioのソリューションエクスプローラーからソリューションフォルダを右クリックして「新しい項目の追加」を選択し、「アセンブリ構成ファイル」を選択してそのまま追加ボタンを押す。するとApp.configというファイルがソリューションに追加されるだろう。
そうしたら、そのファイルに以下のように記入する。

App.config

<?xml version="1.0"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    
  <supportedRuntime version="v2.0.50727"/></startup>
</configuration>

この後プロジェクトをビルドして実行すれば、先ほどの例外は発生しなくなる。

アプリを実行して「Create」ボタンを押すとアプリの実行フォルダに「sqlitelesson.db」というファイルが生成されるだろう。このファイルがsqliteのデータベースファイルである。その中には「Lesson」という名前のテーブルがあり、3件のデータが追加されている。
次に「Select」ボタンを押すと以下のように表示される。

ID:1 Name:Tom Age:43
ID:2 Name:John Age:29
ID:3 Name:Mike Age:35

参考サイト:
http://msdn.microsoft.com/ja-jp/magazine/ff898405.aspx


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です