C#でSQLiteに接続して、直接SQLを実行する方法(ADO.NET)を解説します。
他のDBMSと違って、SQLiteを別途インストールする必要がないのでお手軽に実行できます。
なお、Entity Framework Coreを使ってSQLiteを操作する方法については以下の記事を参照してください。
環境
- Visual Studio 2022
- .NET 8
準備
Visual Studioで新しいプロジェクトを立ち上げます。今回はコンソールアプリで説明します。
C#でSQLiteを使うためにはパッケージの追加が必要になります。
プロジェクトが起動したら、ソリューションエクスプローラーのプロジェクト名を右クリックし、「NuGetパッケージの管理」をクリックします。
「参照」の検索バーに「Microsoft.Data.Sqlite」と検索し、表示された「Microsoft.Data.Sqlite.Core」をインストールしてください。
同様の手順で「SQLitePCLRaw.bundle_e_sqlite3」というパッケージもインストールします。
これをインストールしないと、実行時に System.Exception: 'You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling
というエラーが出てしまいます。
SQLiteに接続
それではSQLiteに接続して、テーブルの内容を取得してみましょう。
以下のプログラムを実行することで、テーブルの作成・データの挿入・データの取得を1度に行うことができます。
using Microsoft.Data.Sqlite;
// 接続先情報(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 = "DROP TABLE IF EXISTS users;";
command.ExecuteNonQuery();
// 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\netx.0
にデータベースファイル(拡張子が.sqlite
)が作成されます。
作成される場所を変えたい場合は、ファイル名の前に任意のパスを指定してください。
実行結果
無事コンソール上にテーブル内容が表示されました。