【C#】SQLiteに接続して直接SELECT文を実行する

C# / .NET

C#でSQLiteに直接SELECT文を実行してデータを取得する方法をまとめました。

他のDBMSと違って、SQLiteを別途インストールする必要がないのでお手軽に実行できます。

なお、Entity Framework Coreを使って操作する方法については以下の記事を参照してください。

スポンサーリンク

環境

  • Windows10 Home
  • Visual Studio Community 2019
  • .NET Framework 4.8

準備

Visual Studioで新しいプロジェクトを立ち上げます。今回はコンソールアプリにします。

C#でSQLiteを使うためにはパッケージの追加が必要になります。

プロジェクトが起動したら、ソリューションエクスプローラーで「参照」を右クリックし、「NuGetパッケージの追加」をクリックします。

「参照」で「sqlite.core」と検索し、出てきた「Microsoft.Data.Sqlite.Core」をインストールしてください。

SQLiteに接続

それではSQLiteに接続して、テーブルの内容を取得してみましょう。
以下のプログラムを実行することで、テーブルの作成・データの挿入・データの取得を1度に行うことができます。

using Microsoft.Data.Sqlite; // 参照の追加
using System;

namespace SqliteApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // 接続先情報(bin/Debugフォルダ内に「test.sqlite」という名前でDBが作成される)
            var connectionString = "Data Source=test.sqlite";

            // 接続やSQL実行に必要なインスタンスの生成
            using (var connection = new SqliteConnection(connectionString))
            using (var command = connection.CreateCommand())
            {
          // 接続開始
                connection.Open();

                // usersテーブルの作成
                command.CommandText = @"create table users(id int, name varchar(10), age int)";
                command.ExecuteNonQuery();

                // データの挿入
                command.CommandText = @"
                    INSERT INTO users(id, name, age) VALUES(1, 'Mike', 30);
                    INSERT INTO users(id, name, age) VALUES(2, 'Lisa', 24);
                    INSERT INTO users(id, name, age) VALUES(3, 'Taro', 35);";
                command.ExecuteNonQuery();

          // SELECT文の実行
                command.CommandText = "SELECT * FROM users";
                using (var reader = command.ExecuteReader())
                {
                    // 1行ずつデータを取得
                    while (reader.Read())
                    {
                        Console.WriteLine($"ID:{reader["id"]} 名前:{reader["name"]} 年齢:{reader["age"]}");
                    }
                }
            }
        }
    }
}

接続文字列でファイル名のみを指定すると、プロジェクト直下のbin/Debugにデータベースファイルが作成されます。
作成される場所を変えたい場合は、ファイル名の前に任意のパスを指定してください。

実行結果

無事コンソール上にテーブル内容が表示されました。
当然ですが2回実行しようとすると既にテーブルが存在します!と怒られるので注意。

エラーが出たら

もし実行時にこのような「ハンドルされていない例外: System.Exception: You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling SQLitePCL.Batteries.Init().」が出た場合は…

NuGetパッケージで「SQLitePCLRaw.bundle_e_sqlite3」追加すると解決するはずです。

コメント

タイトルとURLをコピーしました