【.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());
}

まとめ(感想文)

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

引用・参考文献

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