質問: 前回にもストアアプリ関係の質問をさせて頂いた者です。 c#での開発になります。 Windows8.1 visulstadio Express for Windows 2013を使用しています。 ストアアプリにローカルデータベースを同梱させる方法なのですが、 こちらを読んでいるのですが根本的な解決方法が明示されているように思えませんでした。 「同梱させるべきではない」とさえ言われているように思えます。 こちらのサイトでは初手で「無理」と言われていますが、 下まで読んでいると環境の問題が上げられています。 > > Windowsストアアプリでは標準機能でローカルDBをサポートしていないようだ。ただ、NuGetでSQLiteが使えるようになる拡張機能を取ってこれるらしい。 > > > と書かれています。 前回には既にこの問題が解決されております。 つまり環境的にも技術的にも、ストアアプリにSQLiteでローカルデータベースを同梱させる事が可能だという事だと思っています。 しかし、そもそもストアアプリにローカルデータベースを同梱させるとはどういう事なのかという件に関して、自分の認識が曖昧である事に気が付きました。 アプリとローカルDBの同梱についての仕組みなどを勉強したいと共に、 実装方法も知りたいです。 sqlite3ではデータベースファイルという物が作られるという情報がネットにありましたが、 コマンドラインでの操作があるのでストアアプリとはまた別の物なのではないかと思っています。 現在、実際にコードを記述して試したところ、 「App1」プロジェクトで作成した「food」DBの「Food」TABLE(?)にレコードを数件入れ、 一度プロジェクトを閉じて開き直し、実行してもデータが保持されている事が確認できています。 また、「App2」プロジェクトを作成し、「food」DBの「Food」TABLE(?)のレコードを抽出しようとした所、何もレコードが入っていないという結果になりました。 ネットで調べた結果、「TABLE作成の記述が抜けていた為にエラーが出た」とあった為、 私のコードでもTABLE作成の記述を書いたり消したりして実行を試しましたが、結果は同じでした。 現在の結果は、ストアアプリにローカルデータベースを同梱させている状態なのでしょうか? 意見やアドバイス、参考になるサイトなど教えていただきたいです。 よろしくお願いします。
回答: そもそもストアアプリは自由にファイル操作することを許されていません。ですのでApp1が作成したファイルをApp2から参照することも許されません。先の質問回答でも ``` var dbpath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "Food.db"); ``` と書かれたように、アプリケーション毎に提供された特定のディレクトリにだけアクセスできます。 データベースについて調査するよりも前に、ストアアプリがどのように制限された環境なのかを調査することをお勧めします。 例えば質問文に「同梱」という語が見られますが、ということは完成したアプリケーションを配布する計画があるのでしょうか? ストアアプリは通常のアプリケーションと異なり実行ファイルをコピーしただけでは動作しません。基本的にはMicrosoft社の提供するWindowsストアにアップロードし、一般公開する必要があります。その公開時に「同梱」するという意味になりますが、その点は認識されているのでしょうか? 先のコメントでは開発環境だけで動作すれば構わないような記述をされていたので、同梱を検討されているとは思いませんでした。