#author("2022-11-06T15:28:44+09:00","","")
* NET6.0でSQLiteを使ってみた(Microsoft.Data.Sqlite(使用) [#w6bfb8f4]
.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().'


* 動作確認環境 [#g361b5f2]
- Windows 10 ver.22H2
- Visual Studio 2022
- .NET 6.0

* 参考ページ [#r24c9805]
- [[Microsoft.Data.Sqlite 概要>https://learn.microsoft.com/ja-jp/dotnet/standard/data/sqlite/?tabs=netcore-cli]]
- [[カスタム SQLite のバージョン>https://learn.microsoft.com/ja-jp/dotnet/standard/data/sqlite/custom-versions?tabs=netcore-cli]]

* SQLiteを操作する環境の構築 [#o99eb437]
Microsoft.Data.Sqlite を使用するので、「NuGetパッケージの管理」を使用しインストールします。~

** Microsoft.Data.Sqlite のインストール [#f5e9a0d6]

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

** Sqlite のバンドルパッケージのインストール [#a0020085]
本サンプルでは、''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から各バンドルを調べてみてください。
- [[カスタム SQLite のバージョン>https://learn.microsoft.com/ja-jp/dotnet/standard/data/sqlite/custom-versions?tabs=netcore-cli]]

''抜粋''
|バンドル|説明|
|SQLitePCLRaw.bundle_e_sqlite3|すべてのプラットフォームで同じバージョンの SQLite を提供します。FTS4、FTS5、JSON1、R*Tree 拡張機能を含みます。 既定値です。|
|SQLitePCLRaw.bundle_e_sqlcipher|オープン ソースの非公式の SQLCipher ビルドを提供します。|
|SQLitePCLRaw.bundle_green|bundle_e_sqlite3 と同じですが、iOS の場合はシステム SQLite ライブラリが使用されます。|
|SQLitePCLRaw.bundle_sqlite3|システム SQLite ライブラリが使用されます。|
|SQLitePCLRaw.bundle_winsqlite3|Windows 10 のシステム SQLite ライブラリである winsqlite3.dll が使用されます。|
|SQLitePCLRaw.bundle_zetetic|Zetetic の公式の SQLCipher ビルドが使用されます (含まれていません)。|

+ NuGetを起動します。
+ NuGetパッケージの管理を起動します。
#br
#ref(01.png)
#br
+ 「参照」をクリックします。
+ ''SQLitePCLRaw.bundle_e_sqlite3'' と入力して検索します。
+ ''SQLitePCLRaw.bundle_e_sqlite3'' をクリックしインストールします。
#br
#ref(11.png)
#br
+変更のプレビュー画面、ライセンスの同意画面が表示されたら、OKボタンを押してインストールを続行します。
#br
#ref(12.png)
#br
+ インストールが正常に完了すると、出力に「終了」が表示されます。
#br
#ref(13.png)
#br

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

 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}");
         }
     }
 }


** 実行例 [#dd4de5d7]
実行したとき、SQLiteのデータベースファイルは実行ファイルと同じ場所に作成されます。~
-ソリューション(プロジェクト)のディレクトリ\bin\Debug\net6.0
再実行する場合は、削除してください。~
テーブル有無チェックをサンプルコードでは実装していなので、「既にテーブルがあります。」と例外が発生します…

#ref(21.png)
#br

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



トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS