System.Data.SQLiteデータベース基本操作 その1 基本コマンド(C#)

̃Gg[͂ĂȃubN}[Nɒlj


sqliteは、C/C++,Java,PHP,Perl等で利用できる軽量データベースであり、MacOS, iOS, Android等に標準搭載されている。Windows, Linuxでもインストールすれば利用可能である。
一方、.NET環境で利用できるsqliteとしては、System.Data.SQLiteがあり、DLLを参照に追加するだけで気軽に使用できる。
今回はこのSystem.Data.SQLiteを用いて、DBへの接続、テーブルの作成、レコードの追加、データの取得を行ってみた。



System.Data.SQLiteの入手


まずDLL一式をSystem.Data.SQLite Download PageからDLする。

Setups for xx-bit Windowsは、インストーラ付き、
Precompiled Binaries for xx-bit Windowsは、インストーラなしzipファイルのようである。

ここでは、sqlite-netFx35-binary-Win32-2008-1.0.77.0.zipをDLした。


参照設定



VisualStudioで新規プロジェクトを立ち上げ、参照にSystem.Data.SQLite.dllを追加する。


コード


以下処理を実装してみた。

ConnectionOpen() データベースへの接続
test.dbファイルがなければ新規生成し、Openする。
CreateTable() テーブルの作成
test.dbデータベースファイルにTestというテーブルを追加する。
ちなみに既に同名のテーブルがある場合はエラーとなる。
InsertRecord() レコードを挿入
INSERT文を発行し、10レコードほど追加する。
SelectRecord() レコードを取得
SELECT文を発行し、テーブル内のレコードを全て取得、表示する。
ConnectionClose() データベースへの接続を閉じる
接続を閉じる。
using System;
using System.Data.SQLite;

namespace SQLiteTest
{
    class Program
    {
        static SQLiteConnection _conn = null;
        static void Main(string[] args)
        {
            ConnectionOpen();

            CreateTable();

            InsertRecord();

            SelectRecord();

            ConnectionClose();
        }

        /// <summary>
        /// データベースに接続
        /// </summary>
        private static void ConnectionOpen()
        {
            _conn = new SQLiteConnection();
            _conn.ConnectionString = "Data Source=testdb.db;Version=3;";
            _conn.Open();
        }


        /// <summary>
        /// テーブルの作成
        /// </summary>
        private static void CreateTable()
        {
            SQLiteCommand command = _conn.CreateCommand();
            command.CommandText = "CREATE TABLE Test (id integer primary key AUTOINCREMENT, text varchar(100))";
            command.ExecuteNonQuery();
        }

        /// <summary>
        /// レコードを挿入
        /// </summary>
        private static void InsertRecord()
        {
            for (int i = 0; i < 10; i++)
            {
                SQLiteCommand command = _conn.CreateCommand();
                command.CommandText = "INSERT INTO Test (text) VALUES (@1)";
                SQLiteParameter parameter = command.CreateParameter();
                parameter.ParameterName = "@1";
                parameter.Value = "this is " + i.ToString() + " text";
                command.Parameters.Add(parameter);
                command.ExecuteNonQuery();
            }
        }

        /// <summary>
        /// レコードを取得
        /// </summary>
        private static void SelectRecord()
        {
            // 全データの取得
            SQLiteCommand command = _conn.CreateCommand();
            command.CommandText = "SELECT * FROM Test";
            var reader = command.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine(string.Format("ID = {0}, Name = {1}",
                    reader.GetInt32(0),
                    reader.GetString(1)
                ));
            }
        }


        /// <summary>
        /// データベース接続を閉じる
        /// </summary>
        private static void ConnectionClose()
        {
            _conn.Close();
        }
    }
}



実行結果



実行時怒られたため、exeと同じフォルダにSQLite.Interop.dllを格納した。
 
SelectRecord()関数でSELECT結果をコンソールに出力している。
追加したレコードが取得できていることが確認できる。

exeにDLLを同梱しておくだけで動作するため、
扱うデータ数が多いアプリケーションを作成する場合の選択肢として、気軽に利用できそうだ。


3 thoughts on “System.Data.SQLiteデータベース基本操作 その1 基本コマンド(C#)

  1. こちらの記事を見て、SQLiteを試して、気づいたことをご報告します。
    Visual C# 2010 Expressを使用して、コードを書きました。
    上記の記事の通り、
    ■デバックでは、
    参照に追加したSystem.Data.SQLite.dllと同じフォルダに
    SQLite.Interop.dllを置いておけば無事実行されましたが、

    ■アプリケーションを発行する場合、
    XMLドキュメントであるSystem.Data.SQLiteも、同じフォルダに同梱して発行しないと、エラーが発生しました。

    私のようなDIYなPC初心者が、同じ現象で悩まないように、コメント欄に書かせてもらいますね。

    最後に、夏研ブログさんの記事をいつも楽しく拝見させてもらっております。役立つ情報をご提供くださり、当方大変に助かっております。
    益々のロフトさんのご活躍を期待しております。
    それでは。

  2. >あさきゆめみし
    こんにちは、役立つ情報ありがとうございます。
    まだまだ奥が深いようですね。。。今後とも遠慮なくご指摘下さい。

  3. Pingback: 人工無脳開発、はじめの一歩:データベース構築 | 無気力ラボ

コメントを残す

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