WebI.KzdLib.SQLite 0.9.1
WebI.KzdLib.SQLite
WebI.KzTools の入出力レイヤー Kouteizu.IO.StorageIO を SQLite ファイル形式に拡張するアドオンライブラリです。.sqlite ファイルから KZDataSet (工程's の各テーブル) を読み書きできます。
インストール
dotnet add package WebI.KzdLib.SQLite
依存: WebI.KzTools (4.7.x 以降、StorageIOFactory.Register を持つもの) と Microsoft.Data.Sqlite (6.0.x)。ターゲットは net472。
クイックスタート
A. 拡張子で自動ディスパッチさせる (推奨)
アプリ起動時に 1 回だけ Register() を呼べば、以降 cmd.LoadDocument("foo.sqlite") / cmd.SaveDocument("foo.sqlite") が SQLite を自動認識します。
using Kouteizu.Network;
using Kouteizu.NetworkCommand;
using WebI.KzdLib.SQLite;
// アプリ起動時に 1 回
SqliteStorageRegistration.Register();
// 以降は標準 API のまま
var doc = new KZDocument();
var cmd = new KZCommand(doc);
cmd.SaveDocument(@"C:\data\project.sqlite");
cmd.LoadDocument(@"C:\data\project.sqlite");
B. StorageIO を直接渡す
KZCommand.LoadDocument2 / SaveDocument2 に SqliteStorageIO を直接渡すこともできます (Register 不要)。
using Kouteizu.IO;
using Kouteizu.NetworkCommand;
var io = new SqliteStorageIO();
var cmd = new KZCommand(new KZDocument());
cmd.SaveDocument2(io, @"C:\data\project.sqlite");
cmd.LoadDocument2(io, @"C:\data\project.sqlite");
動作仕様
LoadDataSet(filePath, ds)—dsの各DataTableに対し、SQLite 同名テーブルからSELECT * FROM "<tableName>"の結果をDataTable.Loadで流し込む。SQLite に存在しないテーブルはスキップする (KZDataSet 全テーブルが揃っていなくても落ちない)。SaveDataSet(filePath, ds)— 各テーブルに対してDROP TABLE IF EXISTS→CREATE TABLE→ 全行INSERTをトランザクション内で実行する。SaveFolder(...)— 非対応 (NotSupportedException)。
型マッピング
| DataColumn.DataType | SQLite 型 | 備考 |
|---|---|---|
bool, byte, short, int, long, sbyte, ushort, uint, ulong |
INTEGER |
bool は 0/1 |
float, double, decimal |
REAL |
|
string, Guid |
TEXT |
|
DateTime, DateTimeOffset, TimeSpan |
TEXT |
ISO 8601 / round-trip 形式 |
byte[] |
BLOB |
|
| その他 (UPString 等) | TEXT |
value.ToString() でシリアライズ、復元は単一引数 string コンストラクタを反射呼び出し |
AllowDBNull == false の列には NOT NULL 制約が付き、DataTable.PrimaryKey は PRIMARY KEY 句として CREATE TABLE に反映されます。
詳細な仕様 (KZDataSet の 79 テーブルのスキーマ・列定義・ラウンドトリップ保証) は本リポジトリの docs/schema.md を参照してください。
Encoding
SQLite は内部的に UTF-8 固定なので、レジストリ KZD_ENCODING_IS_ACP の設定は影響しません。CSV/KZD と異なり、エンコーディング指定は無視されます。
制限事項
SaveDataSetは常に DROP & CREATE です。差分更新や UPSERT は行いません- SQLite のスキーマと DataSet のスキーマが不一致の状態で
LoadDataSetを呼ぶと、DataTable.Loadの挙動 (列名一致でマップ) に従います SaveFolder(KZD/CSV の export 系) は意味を持たないため非対応
ライセンス
Web I Laboratories Inc. (Internal use)
No packages depend on WebI.KzdLib.SQLite.
.NET Framework 4.7.2
- Microsoft.Data.Sqlite (>= 6.0.36)
- WebI.KzTools (>= 4.7.38)