sqliteを利用するc#のサンプルアプリの作り方

C#で、ファイル形式のデータベースである「SQLite」を使うアプリを作ってみます。

利用するパッケージのインストール

はじめに、必要なパッケージをNuGet経由でインストールします。

System.Data.SQLite.CoreとMicrosoft.Data.SQLite.Coreという似たようなパッケージがありますが、お好きな方を選んでよいと思います。

前者はSQlLiteチームによって開発され、後者はMicrosoftのチームによって保守されています。

一般的に前者の方がパフォーマンスが早いと言われていますが、やりたいことによると思います。

後者はEntityFrameworkなどを使えるので、そこが便利。

今回は前者のSystem.Data.SQLite.Coreを使ってみます。

テーブルのCreate

public static void createTable()
{
    using (SQLiteConnection con = new SQLiteConnection("Data Source=" + dbfile))
    {
        con.Open();
        string sql = "create table if not exists sample (id int, code varchar(8), name varchar(20))";

        SQLiteCommand com = new SQLiteCommand(sql, con);
        com.ExecuteNonQuery();
    }

}

レコードのInsert

public static void insertRecord(int id, String code, String name)
{
    using (SQLiteConnection con = new SQLiteConnection("Data Source=" + dbfile))
    {
        con.Open();
        using (SQLiteTransaction trans = con.BeginTransaction())
        {
            SQLiteCommand cmd = con.CreateCommand();

            // インサート
            cmd.CommandText = "insert into sample (id, code, name) VALUES (@id, @code, @name)";

            // パラメータセット
            cmd.Parameters.Add("id", System.Data.DbType.Int64);
            cmd.Parameters.Add("code", System.Data.DbType.String);
            cmd.Parameters.Add("name", System.Data.DbType.String);

            // データ追加
            cmd.Parameters["id"].Value = id;
            cmd.Parameters["code"].Value = code;
            cmd.Parameters["name"].Value = name;
            cmd.ExecuteNonQuery();

            // コミット
            trans.Commit();
        }
    }

}

レコードのselect

public static void selectRecords(String code)
{
    using (SQLiteConnection con = new SQLiteConnection("Data Source=" + dbfile))
    {
        con.Open();

        using (SQLiteCommand command = con.CreateCommand()) {

            command.CommandText = "select id, code, name from sample where code=:code";
            command.Parameters.Add("code", System.Data.DbType.String).Value = code;

            using (SQLiteDataReader sdr = command.ExecuteReader())
            {
                while (sdr.Read() == true)
                {
                    Debug.WriteLine("id=" + (int)sdr["id"] + "; code=" + (string)sdr["code"] + "; name=" + (string)sdr["code"]);

                }
            }
        }
    }

}