【.NET】SQLiteを使ってデータベースを操作する

ネコニウム研究所

PCを利用したモノづくりに関連する情報を掲載するブログ

【.NET】SQLiteを使ってデータベースを操作する

2022-1-6 | , ,

.NETの開発環境(C#)でSQLiteを使いデータベースをごにょごにょしたい!

.NET Coreでも.NET FRAMEWORKでも同じ手順で使えちゃいます。

概要

ファイルベースのデータベースであるSQLiteを.NET Coreや.NET FRAMEWORKの開発環境(C#)で使う。

仕様書

SQLiteを.NET

環境

  • SQLite 3.35.5
  • Visual Studio 2019
  • .NET Core 3.1
  • .NET Framework 4.8

手順書

必要なパッケージをインストールする

「出力」の「パッケージマネージャ」に下記のコマンドを入力してSQLiteを.Net Coreで使うために必要なパッケージをインストールする。または、「ソリューションエクスプローラー」の「NuGetパッケージの管理」からそれぞれパッケージをインストールしても良い。

Install-Package Microsoft.Data.Sqlite
Install-Package SQLitePCLRaw.bundle_e_sqlite3

データベースを作成する

データベースとテーブルを作成するサンプルを下記に示す。

using System;
using Microsoft.Data.Sqlite;

namespace sqlite_test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var connection = new SqliteConnection("Data Source=database.db"))
            {
                connection.Open();
                using (var command = connection.CreateCommand()) {
                    command.CommandText =
                        @"
                            CREATE TABLE IF NOT EXISTS USERS(
                                ID INTEGER NOT NULL PRIMARY KEY,
                                NAME TEXT NOT NULL,
                                AGE INTEGER NOT NULL
                        )
                    ";
                    command.ExecuteNonQuery();
                }
            }
        }
    }
}

正常にプログラムが実行されると実行ファイルと同じ階層にdatabase.dbというファイルが作成される。このファイルがデータベースの本体である。
データベースの中に下記の表のようなUSERSという名前のテーブルが作成される。
SQLiteで使える型については本記事の巻末資料に記載した。

名前 備考
ID INTGER プライマリーキー(ユニーク)
NAME TEXT
AGE INTGER

行を挿入する

テーブルに行を挿入するサンプルを下記に示す。

using System;
using Microsoft.Data.Sqlite;

namespace sqlite_test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var connection = new SqliteConnection("Data Source=database.db"))
            {
                connection.Open();
                using (var command = connection.CreateCommand()) {
                    command.CommandText = "INSERT INTO USERS (ID, NAME, AGE) VALUES (1, 'テスト君', 20)";
                    command.ExecuteNonQuery();
                }
                using (var command = connection.CreateCommand()) {
                    command.CommandText = "INSERT INTO USERS (ID, NAME, AGE) VALUES (2, 'テストちゃん', 18)";
                    command.ExecuteNonQuery();
                }
            }
        }
    }
}

正常にプログラムが実行されるとテーブルに行が追加され、テーブルは下記の表の状態になる。

ID NAME AGE
1 テスト君 20
2 テストちゃん 18

行を取得する

テーブルから行を取得するサンプルを下記に示す。

using System;
using Microsoft.Data.Sqlite;

namespace sqlite_test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var connection = new SqliteConnection("Data Source=database.db"))
            {
                connection.Open();
                using (var command = connection.CreateCommand()) {
                    command.CommandText = "SELECT ID, NAME, AGE FROM USERS";
                    command.ExecuteNonQuery();

                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var id = (int)reader.GetValue(0);
                            var name = reader.GetString(1);
                            var age = (int)reader.GetValue(2);

                            Console.WriteLine($"id={id}, name={name}, age={age}");
                        }
                    }
                }
            }
        }
    }
}

正常にプログラムが実行されるとテーブルから行が取得され、コンソールに行の情報は出力される。

行を更新する

テーブルの行を更新するサンプルを下記に示す。

using System;
using Microsoft.Data.Sqlite;

namespace sqlite_test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var connection = new SqliteConnection("Data Source=database.db"))
            {
                connection.Open();
                using (var command = connection.CreateCommand()) {
                    command.CommandText = "UPDATE USERS SET AGE=21 WHERE ID=1";
                    command.ExecuteNonQuery();
                }
            }
        }
    }
}

正常にプログラムが実行されるとテーブルの行が更新され、テーブルは下記の表の状態になる。(テスト君が1歳を取る)

ID NAME AGE
1 テスト君 21
2 テストちゃん 18

行を削除する

テーブルの行を削除するサンプルを下記に示す。

using System;
using Microsoft.Data.Sqlite;

namespace sqlite_test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var connection = new SqliteConnection("Data Source=database.db"))
            {
                connection.Open();
                using (var command = connection.CreateCommand()) {
                    command.CommandText = "DELETE USERS WHERE ID=1";
                    command.ExecuteNonQuery();
                }
            }
        }
    }
}

正常にプログラムが実行されるとテーブルの行が削除され、テーブルは下記の表の状態になる。(テスト君が除名される…)

ID NAME AGE
2 テストちゃん 18

巻末資料

SQLiteで使える型一覧表

型名 備考
NULL NULL値
INTEGER 符号付整数
REAL 浮動小数点数(FLOAT)
TEXT 文字列
BLOB Binary Large OBject(バイナリ列)

使用してるSQLiteのバージョンを取得する

下記のコードを実行するとコンソールに使用してるSQLiteのバージョンが表示される。

using (var connection = new SqliteConnection("Data Source=:memory:"))
{
    connection.Open();
    var command = connection.CreateCommand();
    command.CommandText = "select sqlite_version()";
    Console.WriteLine(command.ExecuteScalar());
}

まとめ(感想文)

データベースのサーバーを用意するまででもない場合(ローカルでちゃちゃっと済ませたい時など)に良いかもね!

引用・参考文献

下記の記事を参考にさせて頂きました。
ありがとうございました。