rksoftware

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

.NET で SQLite を使う ( テータの挿入 )

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

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

Select を行って実際に結果の値を見てみるには、意外なことに実は事前に一度は Insert をしなければならない

テーブルにデータを Insert する

insert into saitama values (1, 'せんべい');

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

// テーブルにデータを Insert する
command.CommandText = "insert into saitama values (1, 'せんべい');";
command.ExecuteNonQuery();

動作する全体のコード

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

// データ Insert 用のサンプルなので、毎回初期化したい。雑にデータベースファイルを毎回作り直してしまうために一旦削除する
var file = new FileInfo(Path.Combine(Environment.CurrentDirectory, "database.db"));
if (file.Exists) file.Delete();

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();

    // テーブルにデータを Insert する
    command.CommandText = "insert into saitama values (1, 'せんべい');";
    command.ExecuteNonQuery();

    // テーブルを検索する
    command.CommandText = "select * from saitama where no = $no;";
    command.Parameters.AddWithValue("$no", 1);
    using (var reader = command.ExecuteReader())
    {
        var dt = new DataTable();
        dt.Load(reader);

        // 結果を表示
        foreach (var row in dt.AsEnumerable())
            Console.WriteLine($"Saitama, {row["name"]}");
    }
}

実行結果

Saitama, せんべい

簡単ですね。

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

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

.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 する記事です。

.NET で SQLite を使う ( テーブルの作成 )

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

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

テーブルを作成する

Select するコードは以前に書きましたが、テーブルがなければ Select はできません。

テーブルを作成するコードはこんな感じですね。

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

動作する全体のコード

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

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 = "select * from saitama where no = $no;";
    command.Parameters.AddWithValue("$no", 1);
    using (var reader = command.ExecuteReader())
    {
        var dt = new DataTable();
        dt.Load(reader);
        foreach (var row in dt.AsEnumerable())
            Console.WriteLine($"Saitama, {row["name"]}");
    }
}

実行してみると、計画通り!
テーブルが作成され、Select が行えるようになりました。

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

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

.NET で SQLite を使う ( データベースファイルの作成 )

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

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

データベースファイルを作成する。

今回はいわゆるコンソールアプリで作っています。ローカルマシン上で動くアプリです。となればデータベースファイルをどこに作るのか? といった戦略的な判断が必ず必要になってきます。
今回は、どうやったらどこに作れるのかを見てみます。

とりあえず作ってみる

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

これで、exe ファイルと同じディレクトリに database.db ファイルが生まれます。

カレントディレクトリ

exe ファイルの隣に生まれるのは何故でしょう?
カレントディレクトリを変更してみます。

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

// 現在のカレントディレクトリの下に a というディレクトリを作る
var path = new System.IO.DirectoryInfo(System.IO.Path.Combine(Environment.CurrentDirectory, "a"));
if (!path.Exists) path.Create();

// カレントディレクトリを変更
Environment.CurrentDirectory = path.FullName;

// Data Source に a/ を追加
using (var connection = new SqliteConnection("Data Source=a/database.db"))
{
    connection.Open();
}

実行してみると、計画通り!
a というディレクトリの中にファイルが作られます。

ディレクトリを戻ってみる

using Microsoft.Data.Sqlite;

// ディレクトリを一つ戻ってみる
using (var connection = new SqliteConnection("Data Source=../database.db"))
{
    connection.Open();
}

実行してみると、計画通り!
exe ファイルの一つ上のディレクトリの中にファイルが作られます。

結論

SQLite 完全に理解しました。

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

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

.NET で SQLite を使う

.NET で SQLite を使ってみます。
意外とやったことがなかったので。基本的にデスクトップであればもと別のものを使いますし、Xamarin であればまた別のライブラリが使われてきましたので。

今回使うライブラリ ( NuGet ) からインストールしてください。

  • Microsoft.Data.Sqlite

とりあえずデータを Select して出力してみる

using Microsoft.Data.Sqlite;
using System;
using System.Data;
using (var connection = new SqliteConnection("Data Source=database.db"))
{
    connection.Open();
    var command = connection.CreateCommand();
    command.CommandText = "select * from saitama where no = $no;";
    command.Parameters.AddWithValue("$no", 1);
    using (var reader = command.ExecuteReader())
    {
        var dt = new DataTable();
        dt.Load(reader);
        foreach (var row in dt.AsEnumerable())
            Console.WriteLine($"Saitama, {row["name"]}");
    }
}

出力結果

Saitama, せんべい

こんな感じです。ただこのコードだけだとそもそもテーブルもデータも作つくっていないコードなので、実はいきなり書いても動きません。
そのあたりは今後に。

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

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

とても素敵なお気に入りの映画に出会ったとします。何回劇場で観ますか?

アンケート結果です。私の感覚としては意外な結果だったので記録として残しておきます。

お気に入りの映画は DVD で観ることが多く、4 番目 (その他 = ゼロ回) がもっと多いのではないかと予想をしていました。(B 級) 映画の多くは日本で劇場公開されずに DVD での販売になるケースが多い印象なので。
あと、同じ映画を劇場で 8 回以上観る方も決して珍しくないというのも、良い知見を得ました。この結果を見て、これからは私も疑問を持たずに何度も劇場へ足を運べるようになると思います。

Web フォームに新機能はないけど Visual Studio での対応が強化されるらしいので見てみた

元ネタはこちら

Visual Studio 2022 (現在はプレビュー版) で Web フォームのデザイナーが新しくなって強化されました。

Web フォーム 見捨てられてなかった!

Win フォームも同様ですが、この「もう過去の技術なので新機能は追加しない。けれど、IDE がバージョンアップしてもしっかり IDE は対応する」ってのはすごいですね。まあ、Win フォームは .NET 対応するし、新機能もあるんですねどね!

新しくなっていることを確認する

個々の機能については前述の記事に詳細あるので、今回は Visual Studio 2019 と 2022 を比べてみて変わっていることを実際に見てみます。

見た目

見た目です。

Visual Studio 2019
f:id:rksoftware:20210723123806j:plain

Visual Studio 2022
f:id:rksoftware:20210723123817j:plain

2022 の方がシュッとしていますね。Learn more » の部分が 2022 では角丸になっていところに注目してみます。css として次のような設定が行われています。

border-radius: 6px;

IE では 9 からの対応とのことです。

参考 border-radius - CSS: カスケーディングスタイルシート | MDN

ちなみに、素のボタンを IE と Edge で表示するとこんな感じです。上が IE で 下が Edge。
f:id:rksoftware:20210723123835j:plain
Edge のボタンが角丸になっていることが確認できます。前述のデザイナーの見た目でも 2022 はボタンが角丸だったので時代は角丸ということなんでしょうね。

ライブプレビュー

ソースとデザインを並べた状態でソースを変更してみます。

Visual Studio 2019
f:id:rksoftware:20210723123850j:plain

Visual Studio 2022
f:id:rksoftware:20210723123901j:plain

2022 ではリアルタイムでデザインのビューが変更されます。ライブプレビュー!
2019 では、ソースを変更した後、黄色い帯をクリックしなければデザインビューに反映されません。

せっかくなので実験

この確認のために、二つの Visual Studio で一つのプロジェクトを開いていたので気になったので試してみました。
2019 でソースコードを変更した場合に、2022 のデザインビューがどうなるか。

f:id:rksoftware:20210723123920j:plain

結果は残念ながらデザインビューは変更されませんでした。普通は Visual Studio の外でソースを変更するとかないので特に問題ないですよね。

Web フォーマーも安心

Web フォームは .NET にならないし今後、新機能も追加されないと思います。しかし安心です。.NET Framework もなくなりませんし、Visual Studio の対応もなくならないようです。安心して Web フォームを扱えますね。