こんにちは。
前提・実現したいこと
先ほどはSQLiteにご示唆いただきありがとうございます。
SQLは少し経験がありますがSQLiteは初心者なので、ちがいにとまどっています。
今回の質問はSQLiteへのサンプル登録のC#コードの重複をなくしたい件です。
発生している問題
SQLiteに登録用のC#コードを書き、サンプル登録をしました。
Model(=table)ごとにコードを書いて動くことは動きました。
サンプルも登録できました。
ところがこのコード、Modelを渡すので、同じコードがテーブルの数だけできてしまい、保守性がありません。
List<Model>のかわりにList<object>とすると、
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー 型 'Microsoft.VisualStudio.DesignTools.WpfDesigner.InstanceBuilders.WindowInstance' のオブジェクトを型 'DamabaseManager.MainWindow' にキャストできません。 DamabaseManager MainWindow.xaml 2
という、意味不明のエラーとなります。
プロジェクトはWPFです。
該当のソースコード
C#
1 public static void InsertData(List<Model> items) 2 { 3 // SampleDb.sqlite を作成(存在しなければ) 4 using (var connection = new SQLiteConnection("Data Source=Model.sqlite")) 5 { 6 // データベースに接続 7 connection.Open(); 8 // コマンドの実行 9 using (var command = connection.CreateCommand()) 10 { 11 try 12 { 13 var index = SQLiteCreateTableUtility.CreateTable(command, typeof(Model), null, "id"); 14 SQLiteCreateTableUtility.CreateIndex(command, typeof(Model), index); 15 16 InsertSample(connection, items); 17 } 18 catch (Exception exception) 19 { 20 throw; 21 } 22 } 23 // 切断 24 connection.Close(); 25 } 26 } 27 28 private static void InsertSample(SQLiteConnection connection, List<Model> items) 29 { 30 // データ挿入 31 using (DataContext context = new DataContext(connection)) 32 { 33 Table<Model> additems = context.GetTable<Model>(); 34 foreach (var item in items) 35 { 36 try 37 { 38 additems.InsertOnSubmit(item); 39 } 40 catch (Exception exception) 41 { 42 throw; 43 } 44 } 45 try 46 { 47 context.SubmitChanges(); 48 } 49 catch (Exception exception) 50 { 51 throw; 52 } 53 } 54 } 55
試したこと
List<Model>のかわりにList<object>としてみた。
ひょっとして、CastすればOKでしょうか?
補足情報(FW/ツールのバージョンなど)
Microsoft Visual Studio Community 2017
Version 15.9.2
VisualStudio.15.Release/15.9.2+28307.108
Microsoft .NET Framework
Version 4.7.03190
OS Microsoft Windows 10 Pro
SQLite System.Data.SQLite.Core v1.0.109.2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。