rksoftware

Visual Studio とか C# とかが好きです

.NET で SQLite を使う ( テーブル定義の取得 )

.NET で SQLite を使ってみます。

とりあえずデータの Select コードはこちら

クライアントマシンで動作するアプリでは、アプリのバージョンアップに伴うデータベースの変更という面倒ごとが存在ます。
いろいろな方法が考えられますが、実際の定義を見て判断ができるとなれば心強いでしょう。

テーブルの定義を取得する

PRAGMA TABLE_INFO ('saitama')

こんな感じです。saitama がテーブル名ですね。

// テーブルの情報を取得する
command.CommandText = "PRAGMA TABLE_INFO ('saitama')";

using (var reader = command.ExecuteReader())
{
    var dt = new DataTable();
    dt.Load(reader);

    // 結果を表示
    foreach (var row in dt.AsEnumerable())
    {
        foreach (DataColumn col in dt.Columns)
            Console.Write($"{col.ColumnName}:{row[col.ColumnName]} ");
        Console.WriteLine();
    }
}

実行するとこんな感じです。

cid:0 name:no type:INTEGER notnull:1 dflt_value: pk:1
cid:1 name:name type:TEXT notnull:1 dflt_value: pk:0

※ 前述のコードは一部抜粋なので、前述のコードだけでは実行できません。

動作する全体のコード

using Microsoft.Data.Sqlite;
using System;
using System.Data;
using System.Linq;

using (var connection = new SqliteConnection("Data Source=database.db"))
{
    connection.Open();

    var command = connection.CreateCommand();

    // テーブルを作成する
    command.CommandText = "CREATE TABLE IF NOT EXISTS saitama ( no INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL);";
    command.ExecuteNonQuery();

    // テーブルの情報を取得する
    command.CommandText = "PRAGMA TABLE_INFO ('saitama')";
    using (var reader = command.ExecuteReader())
    {
        var dt = new DataTable();
        dt.Load(reader);

        // 結果を表示
        foreach (var row in dt.AsEnumerable())
        {
            foreach (DataColumn col in dt.Columns)
                Console.Write($"{col.ColumnName}:{row[col.ColumnName]} ");
            Console.WriteLine();
        }
    }
}

簡単ですね。

今回の SQLite 記事に関連する記事のまとめ

データベース作って、テーブル作って、テーブル定義を読んで、データを Insert して、データを Select する記事です。