2017-12-31 191 views
0

私はSQLiteを初めて使用しています。私はUWPアプリケーションで使用したいと思います。事は、私は現在の接続を作成するには、この持っている:UWP SQLite - .dbファイルを見つける/作成できません

public static void InitializeDatabase() 
     { 
      using (SqliteConnection db = 
       new SqliteConnection("Filename=DatabaseFile.db")) 
      { 
       db.Open(); 

       String tableCommand = "CREATE TABLE IF NOT " + 
        "EXISTS MyTable (Primary_Key INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        "Text_Entry NVARCHAR(2048) NULL)"; 

       SqliteCommand createTable = new SqliteCommand(tableCommand, db); 

       createTable.ExecuteReader(); 
      } 
     } 

をしかし、私は(mysqlのような)その中のすべてのそれのデータを保持するデータベースシステムが欲しいです。これはSQLiteでも可能ですか?そしてどうやって?また、私はそのコードを使用する場合、私は今すぐファイルを作成取得?これはどのように可能ですか?私は、そのファイルをすることができます

Project structure

、すでにそれにいくつかのデータを追加しました:私はそれのテーブルで、.dbファイルを作成する必要があり

プロジェクト構造(thisソフトウェアを使用します)しかし、どこで、私は手がかりがありませんか?

答えて

-1

SQLiteは、MySQLやSQLサーバーのようなサーバーデータベースではありません。データベースはappsディレクトリに作成されます。 UWPアプリはサンドボックス内で実行されるため、別のUWPアプリで使用することはできません。

2

コードは、あなたが提供するスニペット(あなたのアプリケーションのPACKAGE_IDはの包装タブにパッケージ名としてリストされ、通常はWindowsのパスC:\Users\[USER_NAME]\AppData\Local\Packages\[PACKAGE_ID]\LocalStateで発見されたアプリのローカルストレージフォルダ内のデータベースファイルを作成します。 appxmanifestファイル)。これは基本的にアプリケーションに完全な読み取り/書き込みアクセス権を持つフォルダが非常に少ないため、他の場所にデータベースファイルを置くためのオプションはそれほど多くありません。

すでにいくつかのテーブルが含まれているデータベースを事前に定義していて、それをアプリケーションの一部としてパッケージ化したい場合は、単にスクリーンショットに正しく表示されているように追加することができますそのプロパティを開き、コンテンツビルドアクションを設定し、それ以外の場合は、最終的なアプリパッケージの一部ではありませんことを忘れ:

Set a file's Build Action to "Content"

その後、あなたはアプリのにこのファイルをコピーする必要がありますストレージフォルダより前 SQLiteを作成する接続。以下のようなものを使用して:

var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///DatabaseFile.db")); 
await file.CopyAsync(ApplicationData.Current.LocalFolder); 

ms-appx:///接頭辞は、ファイルは、アプリケーションパッケージのルートフォルダ内に存在するファイルシステムに指示します。あなただけへの追加としてなど、ファイルが既に存在するかどうかをチェック(のみおそらく最初のアプリの起動時にそれをコピー!)、excceptionハンドリング、

+0

私はそれを取得しないので、私はアプリの起動時に実行する必要がありますが、一度だけ? SQLiteは.dbファイルなので、ファイルに保存してそこに保存することができます。私はそれをどのように使うことができるのか、それともどのように "そのファイルを使う"と言うことができるのか理解できません。/私は "標準的な"データを使用する必要があります。 – Robin

+0

データベースには、アプリケーション全体で変更されない標準データだけが含まれている場合は、一度コピーするか起動するたびにコピーするかは関係ありません。私の答えに示されているように、パッケージされたdbをディスクにコピーし、コードスニペットのように接続を作成します。コピーされたdbファイルの名前が 'SqliteConnection'コマンドで指定されたものと全く同じ場合、コピーされたファイルは、新しいデータベースを作成する代わりに自動的に使用され、事前にパッケージされたすべてのデータを読み取ることができます。 – andreask

+0

問題は、毎回自分のデータを失いたくないということです。したがって、ファイルを読み込んで、それを元に戻して保存し直してください(mysqlデータベースのように) – Robin

0

を追加したいよ現実のアプリで

、 @andreaskの答えは、読み取り専用モードであっても、アプリケーションパッケージ内のDBと直接対話することも可能です。

var file = await StorageFile.GetFileFromApplicationUriAsync(
       new Uri("ms-appx:///DatabaseFile.db")); 
var dbPath = file.Path; 

次に、通常はDBに接続してください。ただし、変更クエリは失敗します。

関連する問題