回答編集履歴

2

解決方法の追記

2016/11/17 06:34

投稿

nuits.jp
nuits.jp

スコア346

test CHANGED
@@ -23,3 +23,107 @@
23
23
 
24
24
 
25
25
  ひとまずこれらの情報をベースに試してみることをお勧めします。
26
+
27
+
28
+
29
+ 2016.11.17 追記
30
+
31
+ アプリにDBファイルを添付して配布したいとのことでしたので、その方法を追記したいと思います。
32
+
33
+ なお、動くソースコードをこちらに公開していますので、併せて確認してみてください。
34
+
35
+ [https://github.com/nuitsjp/XamarinSamples](https://github.com/nuitsjp/XamarinSamples)
36
+
37
+ ここのXFEmbeddSQLiteFile.slnを開いてください。
38
+
39
+
40
+
41
+ さて、手順的には次のように実装します。
42
+
43
+ 1. PCLのソリューションに別途作成したSQLiteデータベースファイルを配置しプロパティを「埋め込みリソース」に変更する
44
+
45
+ 2. プロジェクトに、sqlite-net-pclとPCLStorageを追加する
46
+
47
+ 3. コードを記述する
48
+
49
+
50
+
51
+ コードは以下の感じです。
52
+
53
+ ```cs
54
+
55
+ const string databaseFileName = "sqlite.db3";
56
+
57
+ // ルートフォルダを取得する
58
+
59
+ IFolder rootFolder = FileSystem.Current.LocalStorage;
60
+
61
+ // ファイルシステム上のDBファイルの存在チェックを行う
62
+
63
+ var result = await rootFolder.CheckExistsAsync(databaseFileName);
64
+
65
+ if (result == ExistenceCheckResult.NotFound)
66
+
67
+ {
68
+
69
+ // 存在しなかった場合、新たに空のDBファイルを作成する
70
+
71
+ var newFile = await rootFolder.CreateFileAsync(databaseFileName, CreationCollisionOption.ReplaceExisting);
72
+
73
+ // Assemblyに埋め込んだDBファイルをストリームで取得し、空ファイルにコピーする
74
+
75
+ var assembly = typeof(App).GetTypeInfo().Assembly;
76
+
77
+ using (var stream = assembly.GetManifestResourceStream("XFEmbeddSQLiteFile.sqlite.db3"))
78
+
79
+ {
80
+
81
+ using (var outputStream = await newFile.OpenAsync(FileAccess.ReadAndWrite))
82
+
83
+ {
84
+
85
+ stream.CopyTo(outputStream);
86
+
87
+ outputStream.Flush();
88
+
89
+ }
90
+
91
+ }
92
+
93
+ }
94
+
95
+
96
+
97
+ // ファイルからコネクションを作成しデータを取得する
98
+
99
+ var file = await rootFolder.CreateFileAsync(databaseFileName, CreationCollisionOption.OpenIfExists);
100
+
101
+ using (var connection = new SQLiteConnection(file.Path))
102
+
103
+ {
104
+
105
+ var builder = new StringBuilder();
106
+
107
+ foreach (var customer in connection.Table<Customer>())
108
+
109
+ {
110
+
111
+ builder.Append($"Id:{customer.Id} Name:{customer.Name}, ");
112
+
113
+ }
114
+
115
+ label.Text = builder.ToString();
116
+
117
+ }
118
+
119
+ ```
120
+
121
+
122
+
123
+ [https://github.com/nuitsjp/XamarinSamples/blob/master/XFEmbeddSQLiteFile/XFEmbeddSQLiteFile/App.cs#L39](https://github.com/nuitsjp/XamarinSamples/blob/master/XFEmbeddSQLiteFile/XFEmbeddSQLiteFile/App.cs#L39)
124
+
125
+
126
+
127
+ これであとは普通に利用できるはずです。
128
+
129
+ 参考にどうぞ

1

文章内のURLをリンクに修正

2016/11/17 06:34

投稿

nuits.jp
nuits.jp

スコア346

test CHANGED
@@ -4,13 +4,13 @@
4
4
 
5
5
 
6
6
 
7
- https://developer.xamarin.com/guides/xamarin-forms/working-with/databases/
7
+ [https://developer.xamarin.com/guides/xamarin-forms/working-with/databases/](https://developer.xamarin.com/guides/xamarin-forms/working-with/databases/)
8
8
 
9
9
 
10
10
 
11
11
  またPCLのSQLiteライブラリはNuGet上に複数ありますが、どれを使うべきかは、手前味噌ですがこちらを参考にしてみてください。
12
12
 
13
- http://www.nuits.jp/entry/2016/06/27/193455
13
+ [http://www.nuits.jp/entry/2016/06/27/193455](http://www.nuits.jp/entry/2016/06/27/193455)
14
14
 
15
15
 
16
16
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  またまた手前みそですが、こちらに少しその辺のノウハウを記載しています。
20
20
 
21
- http://www.nuits.jp/entry/2016/06/27/191636
21
+ [http://www.nuits.jp/entry/2016/06/27/191636](http://www.nuits.jp/entry/2016/06/27/191636)
22
22
 
23
23
 
24
24