このエントリーをはてなブックマークに追加

NET6.0でSQLiteを使ってみた(Microsoft.Data.Sqlite(使用)

.NET6.0, C#, コンソールアプリで Microsoft.Data.Sqlite を使って SQLite を操作する環境の構築とサンプルコードを作成してみました。

Microsoft.Data.Sqliteをインストールして実行すれば動作するだろう!と思って作業をしましたが、以下の例外が発生し、
別途、本例外を解消するためのパッケージもインストールします。

System.Exception: 'You need to call SQLitePCL.raw.SetProvider().  If you are using a bundle package, this is done by calling SQLitePCL.Batteries.Init().'

動作確認環境

  • Windows 10 ver.22H2
  • Visual Studio 2022
  • .NET 6.0

参考ページ

SQLiteを操作する環境の構築

Microsoft.Data.Sqlite を使用するので、「NuGetパッケージの管理」を使用しインストールします。

Microsoft.Data.Sqlite のインストール

  1. NuGetパッケージの管理を起動します。
     
    01.png
     
  2. 「参照」をクリックします。
  3. Microsoft.Data.Sqlite と入力して検索します。
     
    02.png
     
  4. Microsoft.Data.Sqlite.Core をクリックしインストールします。
     
    03.png
     
  5. 変更のプレビュー画面、ライセンスの同意画面が表示されたら、OKボタン、I Acceptボタンを押してインストールを続行します。
     
    04.png
     
    05.png
     
  6. インストールが正常に完了すると、出力に「終了」が表示されます。
     
    06.png
     

Sqlite のバンドルパッケージのインストール

本サンプルでは、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 SQLitePCL.Batteries.Init().'

他にもバンドルがあります。
以下のURLから各バンドルを調べてみてください。

抜粋

バンドル説明
SQLitePCLRaw.bundle_e_sqlite3すべてのプラットフォームで同じバージョンの SQLite を提供します。FTS4、FTS5、JSON1、R*Tree 拡張機能を含みます。 既定値です。
SQLitePCLRaw.bundle_e_sqlcipherオープン ソースの非公式の SQLCipher ビルドを提供します。
SQLitePCLRaw.bundle_greenbundle_e_sqlite3 と同じですが、iOS の場合はシステム SQLite ライブラリが使用されます。
SQLitePCLRaw.bundle_sqlite3システム SQLite ライブラリが使用されます。
SQLitePCLRaw.bundle_winsqlite3Windows 10 のシステム SQLite ライブラリである winsqlite3.dll が使用されます。
SQLitePCLRaw.bundle_zeteticZetetic の公式の SQLCipher ビルドが使用されます (含まれていません)。
  1. NuGetを起動します。
  2. NuGetパッケージの管理を起動します。
     
    01.png
     
  3. 「参照」をクリックします。
  4. SQLitePCLRaw.bundle_e_sqlite3 と入力して検索します。
  5. SQLitePCLRaw.bundle_e_sqlite3 をクリックしインストールします。
     
    11.png
     
  6. 変更のプレビュー画面、ライセンスの同意画面が表示されたら、OKボタンを押してインストールを続行します。
     
    12.png
     
  7. インストールが正常に完了すると、出力に「終了」が表示されます。
     
    13.png
     

SQLite操作のサンプルコードと実行結果

以下の C# サンプルコードを .NET6.0 コンソールアプリとしてプロジェクトを作成し実行した結果です。

サンプルコード

using Microsoft.Data.Sqlite;

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

    var command = connection.CreateCommand();
    command.CommandText = @"CREATE TABLE winos(id INT, name VARCHAR(20))";
    command.ExecuteNonQuery();
    command.CommandText = @"INSERT INTO winos VALUES(1,'Windows10')";
    command.ExecuteNonQuery();
    command.CommandText = @"INSERT INTO winos VALUES(2,'Windows11')";
    command.ExecuteNonQuery();

    command.CommandText = @"SELECT name FROM winos";
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            var name = reader.GetString(0);
            Console.WriteLine($"OSNAME: {name}");
        }
    }
}

実行例

実行したとき、SQLiteのデータベースファイルは実行ファイルと同じ場所に作成されます。

  • ソリューション(プロジェクト)のディレクトリ\bin\Debug\net6.0 再実行する場合は、削除してください。
    テーブル有無チェックをサンプルコードでは実装していなので、「既にテーブルがあります。」と例外が発生します…
21.png
 

以上、.NET6.0, Microsoft.Data.SQLite を使って SQLite を操作する環境構築とサンプルコードでした。


添付ファイル: file21.png 5件 [詳細] file13.png 6件 [詳細] file12.png 5件 [詳細] file11.png 5件 [詳細] file06.png 6件 [詳細] file05.png 6件 [詳細] file04.png 5件 [詳細] file03.png 6件 [詳細] file02.png 6件 [詳細] file01.png 7件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-11-06 (日) 15:41:57