C#でSQLiteの基本的な使い方

SQLiteといえば、オープンソースで軽量なRDBMS(リレーショナルデータベース管理システム)。

サーバーとしてではなく、プログラムに組み込んで動作させることができるます。

データは単一のファイルで管理されるため扱いも簡単なSQLiteの基本的な使い方を解説します。 


データベースを開く

SQLiteデーターベースへの接続を開始するには「System.Data.SQLite.SQLiteConnection」クラスを使います。

接続先のデータベースを表す接続文字列(ConnectionString)を指定して利用を開始します。

接続文字列は「Data Source=」の後にSQLiteのデータファイル名を記述する形になります。

(接続文字列を作るためのクラス「SQLiteConnectionStringBuilder」をつかってもよさそうです)

 

var connectionString = "Data Source=test.db";
using (var connection = new SQLiteConnection(connectionString))
{
    connection.Open();

    connection.Close();
}

SQLiteConnectionクラスはIDisposableインターフェースを継承していて、使い終わったらDisposeメソッドを呼び出す必要があります。確実にDisposeが呼び出されるようusingを使うことをお勧めします。

 

SQLiteConnectionオブジェクトが生成できたら、Openメソッドを呼び出すことでデータベースへのアクセスが可能になります。

データーベースを使い終わったらCloseメソッドを呼び出しましょう。DisposeメソッドがよばれればCloseもされるので省略しても良いかもしれませんが、Disposeはusingのスコープから外れる時まで呼ばれないので、使い終わった時点でCloseを呼ぶのがよさそうです。


SQLを発行する

SQL文を実行するには「System.Data.SQLite.SQLiteCommand」クラスを使います。

SQL文とSQLiteConnectionオブジェクトを引数に渡してSQLiteCommandオブジェクトを生成します。

SQLiteCommandクラスもIDisposableインターフェースを継承しているのでusingを使いましょう。

結果を返さないSQLの場合

InsertやUpdateのような結果がないSQL文の場合はExecuteNonQueryメソッドを使います。

var connectionString = "Data Source=test.db";
using (var connection = new SQLiteConnection(connectionString))
{
    connection.Open();

    var sql = "INSERT INTO test (ID,Data1,Data2) VALUES(1,'001','xxx')";
    using (var command = new SQLiteCommand(sql, connection))
    {
        command.ExecuteNonQuery();
    }

    connection.Close();
}

結果を返すSQLの場合

Selectのような結果が返ってくるSQL文の場合にはExecuteReaderメソッドを使います。

ExecuteReaderメソッドは戻り値として「System.Data.SQLite.SQLiteDataReader」オブジェクトを返します。

SQLiteDataReaderを操作することでSQLの結果へアクセスします。

var connectionString = "Data Source=test.db";
using (var connection = new SQLiteConnection(connectionString))
{
    connection.Open();

    var sql = "SELECT * FROM test";
    using (var command = new SQLiteCommand(sql, connection))
    {
        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                var id = (int)reader["ID"];
                var data1 = (string)reader["Data1"];
                var data2 = (string)reader["Data2"];


            }
            reader.Close();
        }
    }

    connection.Close();
}

結果が1つのSQLの場合

レコード数を取得するSQL文などの場合はExecuteScalarメソッドを使う方法もあります。

ExecuteScalarメソッドは結果の先頭行・先頭列の値を戻り値として返します。

var connectionString = "Data Source=test.db";
using (var connection = new SQLiteConnection(connectionString))
{
    connection.Open();

    var sql = "SELECT COUNT(*) FROM test";
    using (var command = new SQLiteCommand(sql, connection))
    {
        var count = (int)command.ExecuteScalar();
    }

    connection.Close();
}