次の方法で共有


方法 : アプリケーションでデータ同期を構成する

更新 : 2008 年 7 月

アプリケーションで必要となるデータが、データベースから継続的に取得しなくてもよいデータ (または常に使用できるとは限らないデータ) である場合、ローカル データベースを使用して、そのデータをアプリケーションと一緒にクライアント コンピュータ上に格納できます。その後、[データ同期の構成] ダイアログ ボックスを使用して Microsoft Synchronization Services for ADO.NET を構成することにより、ローカル データベースとリモート データベースのデータが同期されるようにアプリケーションを設定できます。

Visual Studio 2008 SP1 以降では、同期を構成する場合に、[データ同期の構成] ダイアログ ボックスに加えて、データ ソース構成ウィザードも使用できます。型指定されたデータセットの構成時に、ウィザードの [データベース オブジェクトの選択] ページで、[ローカル データベース キャッシュを有効にする] をオンにします。詳細については、「チュートリアル : データ ソース構成ウィザードを使用した接続の頻度があまり高くないアプリケーションの作成」を参照してください。

メモ スマート デバイス プロジェクトでは、データ ソース構成ウィザードから同期デザイナを開始できません。詳細については、「接続の頻度があまり高くないアプリケーション (デバイス)」を参照してください。また、Visual Studio 2008 SP1 には、SQL Server 2008 の変更追跡機能のサポートが追加されました。[データ同期の構成] ダイアログ ボックスまたはデータ ソース構成ウィザードから同期を構成するときに、SQL Server 2008 の変更の追跡を有効にできます。詳細については、「方法 : SQL Server の変更の追跡を使用するようにデータ同期を構成する」を参照してください。

例として、データベース内の複数のテーブルのデータを使用する在庫管理アプリケーションについて考えてみましょう。個々の部品の在庫品目数は、継続的に変化する重要なデータであるため、常にデータベースの最新の値をアプリケーションに反映する必要があります。一方、アプリケーションには、ほとんど変更されることがない配送業者の一覧も表示されます。これらの有効な配送業者は Shippers テーブルに格納されますが、データベースにデータを照会するたびに取得する必要はありません。この Shippers テーブルをローカル データベース キャッシュに保存することで、アプリケーションがリモート データベースに対して行う不必要なラウンドトリップの数を減らすことができます。頻繁には変更されないデータ (または既知のスケジュールで変更されるデータ) は、ローカル データベース キャッシュに格納することを検討してください。

ローカル データベース キャッシュは、SQL Server Compact 3.5 データベースを使用してデータをローカルに格納します。既存の SQL Server Compact 3.5 データベースをローカル データベース キャッシュとして使用できます。ローカル データベースがまだない場合は、[データ同期の構成] ダイアログ ボックスを設定して新しいローカル データベースを作成できます。

同期を開始するには、アプリケーションにローカル データベースを追加し、[データ同期の構成] ダイアログ ボックスの設定を完了した後で、さらにアプリケーションにコードを追加する必要があります。データが正しく同期されたら、ローカル データベースからデータセットのテーブルを再設定するコードを追加する必要もあります。

Bb384585.alert_note(ja-jp,VS.90).gifメモ :

[データ同期の構成] ダイアログ ボックスでは、ダウンロード シナリオでのみ Microsoft Synchronization Services for ADO.NET を構成できます。これは、[データ同期の構成] ダイアログ ボックスを使用してデータ同期を構成した後、Microsoft.Synchronization.Data.SyncAgent.Synchronize を呼び出すと、リモート データベースで見つかった変更によってローカル データベースのみが更新されることを意味します。ローカル データベースのデータに加えられた変更は、リモート データベースにアップロードされません。[データ同期の構成] ダイアログ ボックスを使用してデータ同期を構成したら、プログラムによって同期中のアップロード (双方向同期) を有効にできます。詳細については、「方法 : ローカル データベースとリモート データベースで双方向同期を構成する」を参照してください。

プロジェクトへのローカル データベース キャッシュの追加

.sync ファイルをプロジェクトに追加し、[データ同期の構成] ダイアログ ボックスを使用してこのファイルを構成することで、データをローカルでキャッシュするようにアプリケーションを構成できます。.sync ファイルをプロジェクトに追加するには、[新しい項目の追加] ダイアログ ボックスを使用します。

次の手順では、データ同期の構成に関連する基本的な手順について説明します。実際のデータを使用する例については、「チュートリアル : 接続の頻度があまり高くないアプリケーションの作成」および「チュートリアル : 接続の頻度があまり高くないスマート デバイス アプリケーションの作成」を参照してください。

Bb384585.alert_note(ja-jp,VS.90).gifメモ :

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。

データ同期を構成するには

  1. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  2. [ローカル データベース キャッシュ] テンプレートをクリックします。

  3. 別の名前を指定するか、LocalDataCache1.sync という既定の名前を受け入れます。

  4. [追加] をクリックします。

    .sync ファイルがプロジェクトに追加され、[データ同期の構成] ダイアログ ボックスが開きます。

  5. [サーバー接続] を接続先のリモート データベースに設定します。

  6. [クライアント接続] を、ローカルでデータを格納する SQL Server Compact 3.5 ローカル データベースに設定します。ローカル データベースがない場合は、"DatabaseName.sdf (新規)" という既定の設定を受け入れることで、プロジェクトに新しいデータベースを作成できます。新しいデータベースの名前は、[サーバー接続] で設定したデータベースの名前に基づきます。

    Bb384585.alert_note(ja-jp,VS.90).gifメモ :

    [OK] ボタンは既定で無効になっていますが、[キャッシュされたテーブル] 領域にテーブルを追加すると有効になります。

  7. [追加] をクリックして [オフライン使用のためのテーブルの構成] ダイアログ ボックスを開き、ローカル データベース キャッシュに追加するデータベース テーブルを選択して構成します。

  8. ローカル データベース キャッシュに追加するデータベース テーブルを選択し、以下の各設定を構成します。

    • [ダウンロードするデータ]

      [初回同期後の新規および増分の変更]

      この設定では、前回のデータ同期以降に変更されたレコードがサーバーから取得されます。初めて同期が呼び出されたときは、テーブル全体がダウンロードされます。

      [毎回テーブル全体]

      この設定では、ローカル データベースが破棄され、サーバーにあるデータベースで置き換えられます。

    • [次を使用して更新を比較]

      選択したテーブル内で、レコードの最終更新がいつ行われたかを追跡するために使用する列の名前を設定します。既定では、日時またはタイムスタンプとして定義された任意の列がこの一覧に表示されます。変更されたレコードの追跡に使用できる列がテーブルに含まれていない場合は、"LastEditDate (新規)" という既定の設定を使用できます。これにより、追跡用の列が自動的に作成されます。

    • [次を使用して挿入を比較]

      選択したテーブル内で、新しいレコードがいつ追加されたかを追跡するために使用する列の名前を設定します。既定では、日時またはタイムスタンプとして定義された任意の列がこの一覧に表示されます。新しいレコードの追跡に使用できる列がテーブルに含まれていない場合は、"CreationDate (新規)" という既定の設定を使用できます。これにより、追跡用の列が自動的に作成されます。

    • [削除された項目の移動先]

      削除されたレコードを格納するために使用する、データベース サーバー上のテーブルに設定します。既定では、tableName_Deleted または tableName_Tombstone という名前のテーブルがこの一覧に表示されます。削除された項目を格納するテーブルがデータベースに含まれていない場合は、"tableName_Tombstone (新規)" という既定の設定を使用できます。これにより、削除された項目用のテーブルが自動的に作成されます。

      Bb384585.alert_note(ja-jp,VS.90).gifメモ :

      オフラインで使用するために構成しているテーブルごとに、これらの設定を構成します。

  9. 既定では、このデータベース サーバーの構成に使用できるサーバー側スクリプトを自動的に生成および実行するように、[スクリプト生成] オプションが設定されています。これらのスクリプトが不要な場合、またはデータベース サーバーにアクセスできない場合は、このオプションをオフにして、手動でスクリプトを実行したりテーブルを変更したりできます。サーバーでの変更が必要ない場合、スクリプトは生成されません。

    Bb384585.alert_note(ja-jp,VS.90).gifメモ :

    これらのスクリプトは、選択されたテーブルにトラッキング列を追加し、削除された項目を格納するテーブルを作成し、ローカル キャッシュ用に設定されたテーブルでの挿入、更新、削除を追跡するために必要なトリガを追加します。

  10. [OK] をクリックします。

  11. [コード スニペットの表示] をクリックし、[コード例] ダイアログ ボックスを開きます。このダイアログ ボックスには、同期処理を開始するコード スニペットが用意されています。このスニペットをクリップボードにコピーして、プログラムに挿入できます。

  12. [詳細設定] の各オプションを設定することもできます。

    [データ同期の構成] ダイアログ ボックスの [詳細設定] のオプションには、テーブルを個別に同期するか、単一のトランザクションで同期するかを制御できる設定が用意されています。これらのオプションによって、n 層アプリケーション用にコード分離を有効にすることもできます。

    1. [テーブルを単一トランザクションで同期する]。既定では、このチェック ボックスはオフになっているため、すべてのテーブルが個別に同期されます。エラーが発生した場合、エラーが発生したテーブルの変更のみがロールバックされます。このチェック ボックスをオンにすると、すべてのテーブルが単一のトランザクションで同期されます。エラーが発生した場合、すべてのテーブルのすべての変更がロールバックされます。

    2. [同期コンポーネントの作成]。既定では、クライアントとサーバーの両方に対して同期コンポーネントが生成されます。アプリケーションの要件を満たすように、このオプションを [クライアントのみ] または [サーバーのみ] に設定できます。

    3. [サーバー プロジェクトの場所]。既定では、サーバーの同期コンポーネントは現在のプロジェクトに生成されます。このオプションを設定すると、ソリューション内の任意の Visual Basic プロジェクトまたは Visual C# プロジェクトにサーバーの同期コンポーネントを生成できます。

    4. [クライアント プロジェクトの場所]。既定では、クライアントの同期コンポーネントは現在のプロジェクトに生成されます。このオプションを設定すると、ソリューション内の任意の Visual Basic プロジェクトまたは Visual C# プロジェクトにクライアントの同期コンポーネントを生成できます。

[データ同期の構成] ダイアログ ボックスの設定が完了したら、同期を開始するコードをアプリケーションに追加する必要があります。

Bb384585.alert_note(ja-jp,VS.90).gifメモ :

データを同期すると、データセット内のテーブルやアプリケーションの他のオブジェクトではなく、ローカル データベースが更新されます。必ず、アプリケーション データ ソースに、ローカル データベースから更新されたデータを再読み込みしてください。たとえば、TableAdapter.Fill メソッドを呼び出して、データセットのデータ テーブルにローカル データベースから更新されたデータを読み込みます。

同期を開始するには

  • 前の手順で [コード例] ダイアログ ボックスからコードをコピーした場合は、それをアプリケーションに貼り付けるだけで済みます。コピーしていない場合は、アプリケーションの同期処理を開始する任意の場所に次のコードを挿入します。

    ' Call SyncAgent.Synchronize() to initiate the synchronization process.
    ' Synchronization only updates the local database, not your project's data source.
    Dim syncAgent As LocalDataCache1SyncAgent = New LocalDataCache1SyncAgent()
    Dim syncStats As Microsoft.Synchronization.Data.SyncStatistics = syncAgent.Synchronize()
    
    ' Add code here to refill your application's data source
    ' with the updated data from the local database.
    
    // Call SyncAgent.Synchronize() to initiate the synchronization process.
    // Synchronization only updates the local database, not your project's data source.
    LocalDataCache1SyncAgent syncAgent = new LocalDataCache1SyncAgent();
    Microsoft.Synchronization.Data.SyncStatistics syncStats =
    syncAgent.Synchronize();
    
    // Add code to refill your application's data source
    // with the updated data from the local database.
    

参照

処理手順

チュートリアル : 接続の頻度があまり高くないアプリケーションの作成

チュートリアル : 接続の頻度があまり高くないクライアント アプリケーションとローカル データベースの配置

接続の頻度があまり高くないデータのサンプル

チュートリアル : 接続の頻度があまり高くないスマート デバイス アプリケーションの作成

概念

接続の頻度があまり高くないアプリケーションの概要

接続の頻度があまり高くないアプリケーション (デバイス)

その他の技術情報

接続の頻度があまり高くないアプリケーション

変更履歴

日付

履歴

原因

2008 年 7 月

データ ソース構成ウィザードを使用したデータ同期の構成についての情報を追加

SP1 機能変更

2008 年 7 月

スマート デバイス プロジェクトにおける同期についてのメモを追加

SP1 機能変更