エクスポート (0) 印刷
すべて展開

方法: Windows Phone アプリケーションと共に参照データベースを展開する

2012/02/09

Windows Phone OS 7.1 では、参照データをローカル データベースに保存し、Windows Phone アプリケーションで配置することができます。アプリケーションをデバイスにインストール後は、参照データベースをインストール フォルダー内に残して読み取り専用接続できるようにすることもできれば、分離ストレージにコピーして読み取り操作と書き込み操作の両方を行えるようにすることもできます。このトピックでは、参照データベースを作成し、アプリケーション内で使用する方法について説明します。ローカル データベースの使用の詳細については、「Windows Phone のローカル データベースの概要」を参照してください。

重要な注重要な注:

デスクトップ上に作成された Microsoft SQL Server Compact (SQL CE) データベースは、Windows Phone アプリケーションで操作できる場合がありますが、これは正式にはサポートされていません。

プライマリ アプリケーションで配置するローカル データベースを作成するには、ヘルパー アプリケーションが必要です。ヘルパー アプリケーションは、開発コンピューター上で実行され、分離ストレージ内にローカル データベースを作成し、そのデータベースに必要な参照データを読み込みます。

このセクションでは、ヘルパー アプリケーションを作成し、そのヘルパー アプリケーションを使用して参照データベースを作成し、その後に分離ストレージ エクスプローラー (ISETool.exe) を使用してローカル データベース ファイルを抽出して、コンピューター上に保存します。Isolated Storage Explorer の詳細については、「方法: 分離ストレージ エクスプローラー ツールを使用する」を参照してください。

参照データベースを作成するには

  1. ローカル データベースを作成して、そのデータベースに参照データを読み込むヘルパー アプリケーションを作成します。詳細については、「方法: Windows Phone 用の基本的なローカル データベース アプリケーションを作成する」および「方法: Windows Phone 用の MVVM でローカル データベース アプリケーションを作成する」を参照してください。

  2. ヘルパー アプリケーションを Windows Phone エミュレーターまたは Windows Phone デバイスに配置します。

  3. ローカル データベースを作成して、そのデータベースに参照データを読み込むヘルパー アプリケーションを作成します。ローカル データベースは、すべて分離ストレージ内に作成されます。

  4. WPAppManifest.xml ファイルの App 要素の ProductID 属性で指定されている、アプリケーションの製品 GUID を取得します。これは、分離ストレージからローカル データベース ファイルをコピーするときに必要になります。

  5. テザリングされたデバイスまたはエミュレーターがまだ実行されている間に、分離ストレージ エクスプローラーを使用してローカル データベースをコンピューターにコピーします。詳細については、「方法: 分離ストレージ エクスプローラー ツールを使用する」を参照してください。

ローカル データベース ファイルをコンピューターに保存したら、その他の種類の既存ファイルを追加する場合と同じ方法でプライマリ アプリケーションに追加できます。

アプリケーションに参照データベースを追加するには

  1. Visual Studio で、参照データベースを使用する Windows Phone アプリケーションのためのプロジェクトを作成します。このアプリケーションは、プライマリ アプリケーションになるもので、ヘルパー アプリケーションとは別のアプリケーションです。

  2. プライマリ アプリケーションの [プロジェクト] メニューから、[既存の項目の追加] を選択します。

  3. [既存の項目の追加] メニューから、分離ストレージ エクスプローラーを使用してコンピューターに保存したローカル データベース ファイルを選択し、[追加] をクリックします。これで、ローカル データベースがプロジェクトに追加されます。

  4. ソリューション エクスプローラーで、ローカル データベース ファイルを右クリックし、ファイルがコンテンツとしてビルドされ、常に出力ディレクトリにコピーされるように ([常にコピーする]) ファイルのプロパティを設定します。

ローカル データベースをアプリケーションで配置すると、配置後にインストール フォルダ内に格納されます。インストール フォルダは読み取り専用です。プライマリ アプリケーションは、インストール フォルダにあるローカル データベースに読み取り専用モードで接続し、読み取りと書き込み両方の操作ができるようにそのデータベースを分離ストレージにコピーすることができます。このセクションでは、これら 2 つのオプションについて詳しく説明します。

インストール フォルダから読み取るには

  • インストール フォルダ内の参照データベースに接続する場合は、接続文字列内の File Mode プロパティを使用して、接続を読み取り専用に指定する必要があります。インストール フォルダーへの読み取り専用接続を行う方法を、次の例に示します。接続文字列の詳細については、「Windows Phone のローカル データベース接続文字列」を参照してください。

    // Create the data context.
    MyDataContext db = new MyDataContext("Data Source = 'appdata:/mydb.sdf'; File Mode = read only;");
    

    この例では、ファイル パスに appdata プレフィックスを使用して、インストール フォルダのパス (appdata) と分離ストレージのパス (isostore) を区別しています。プレフィックスを付けなかった場合は、データ コンテキストによりパスは分離ストレージになります。

参照データベースを分離ストレージにコピーするには

  • 参照データベースをインストール フォルダから分離ストレージにコピーするには、ストリーム ベースのコピーを実行します。ReferencedDB.sdf という名前のローカル データベース ファイルをインストール フォルダのルートから分離ストレージ コンテナーのルートへコピーする MoveReferenceDatabase という名前のメソッドを次の例に示します。

    using System;
    using System.IO;
    using System.IO.IsolatedStorage;
    using System.Windows;
    
    
    namespace PrimaryApplication
    {
        public class DataHelper
        {
    
            public static void MoveReferenceDatabase()
            {
                // Obtain the virtual store for the application.
                IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication();
    
                // Create a stream for the file in the installation folder.
                using (Stream input = Application.GetResourceStream(new Uri("ReferenceDB.sdf", UriKind.Relative)).Stream)
                {
                    // Create a stream for the new file in isolated storage.
                    using (IsolatedStorageFileStream output = iso.CreateFile("ReferenceDB.sdf"))
                    {
                        // Initialize the buffer.
                        byte[] readBuffer = new byte[4096];
                        int bytesRead = -1;
    
                        // Copy the file from the installation folder to isolated storage. 
                        while ((bytesRead = input.Read(readBuffer, 0, readBuffer.Length)) > 0)
                        {
                            output.Write(readBuffer, 0, bytesRead);
                        }
                    }
                }
            }
        }
    }
    
    

表示:
© 2014 Microsoft