チュートリアル : ローカル データベース キャッシュを n 層アプリケーションに追加する

更新 : 2007 年 11 月

Visual Studio における ローカル データベース キャッシュ とは、Microsoft Synchronization Services for ADO.NET を使用してリモート データベースとの間でデータを同期するために構成された SQL Server Compact 3.5 データベースです。このチュートリアルでは、「チュートリアル : n 層データ アプリケーションの作成」のトピックで作成したアプリケーションに SQL Server Compact 3.5 データベースを追加する方法の詳細な手順について説明します。

このチュートリアルでは、次のタスクを実行する方法を学習します。

  • ローカル データベース キャッシュ項目をプロジェクトに追加する。

  • データ同期を構成する。

  • 同期操作を既存のデータ サービスに組み込む。

  • ローカル データベース キャッシュから Customers テーブルを取得するために、データをロードするコードを変更する。

  • 同期処理を開始するコードを追加する。

前提条件

このチュートリアルを完了するには、次の条件が必要です。

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

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

NTierWalkthrough ソリューションを開く

NTierWalkthrough ソリューションを開くには

ローカル データベース キャッシュを NTierWalkthrough に追加する

ローカル データベース キャッシュは、クライアントに配置されている SQL Server Compact 3.5 データベースであるため、ローカル データベース キャッシュの追加先は PresentationTier プロジェクトになります。このチュートリアルでは Customers テーブルをキャッシュに入れる方法を取り上げることから、このローカル データベース キャッシュには CustomersCache という名前を付けます。

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

このチュートリアルでは、Customers テーブルだけを使用するため、ローカル データベース キャッシュの名前を CustomersCache にしますが、1 つのローカル データベース キャッシュに複数のテーブルを追加することも可能です。

プレゼンテーション層にローカル データ キャッシュを追加するには

  1. ソリューション エクスプローラで、PresentationTier を右クリックし、[新しい項目の追加] をクリックします。

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

  3. [名前] に CustomersCache と入力します。

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

    [データ同期の構成] ダイアログ ボックスが開きます。

データ同期の構成

データ同期を構成するには、サーバーへのデータ接続を選択し、アプリケーションでローカル キャッシュに追加するテーブルを選択します。このチュートリアルでは、サーバー接続を SQL Server バージョンの Northwind データベースに設定し、Customers テーブルをローカル キャッシュに追加します。さらに、ローカル データベース キャッシュを n 層アプリケーションに追加するため、詳細オプションを設定して、別個のプロジェクト DataService にサーバー同期コンポーネントを生成することも必要です。

n 層アプリケーションでデータ同期を構成するには

  1. [サーバー接続] を SQL Server バージョンの Northwind データベースに設定します。

  2. [追加] ボタンをクリックして [オフライン使用のためのテーブルの構成] ダイアログ ボックスを開きます。

  3. Customers テーブルに関連付けられているチェック ボックスをオンにし、[OK] をクリックします。(既定値をそのままにします。)

  4. [詳細設定] をクリックします。

  5. [サーバー プロジェクトの場所] の一覧で [DataService] を選択します。

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

    同期コンポーネントが生成され、データの初回の同期が実行され (つまり、ローカル データベースがプロジェクト内に作成されてデータが取り込まれ)、データ ソース構成ウィザードが開きます。

  7. Customers テーブルを選択し、[データベース オブジェクトの選択] ページで、そのテーブルに関連付けられているチェック ボックスをオンにします。

  8. [データセット名] に LocalNorthwindCustomers と入力し、[完了] をクリックします。

既存のデータ サービスで同期を有効にする

生成された同期コンポーネントは DataService プロジェクトに追加されましたが、これからサービスによって実装する必要があります。生成された SyncContract にはサービスにとって必要な情報が含まれています。その情報は、ファイル内ではコメントになっています。サービスの App.config ファイルの該当するセクションに必要な情報をコピーする必要があります。

App.config ファイルにサービス情報を追加するには

  1. ソリューション エクスプローラで CustomersCache.Server.SyncContract ファイルをダブルクリックして開きます。

  2. 以下のようなコメント行を探します。

    <endpoint address ="" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>

  3. コメント文字を含めずにその行をコピーします。

  4. ソリューション エクスプローラで DataService の App.config ファイルをダブルクリックして開きます。

  5. <!-- Metadata Endpoints --> コメントを探します。手順 3 でコピーした行を <endpoint address = "mex" で始まる行の下に追加します。

  6. 貼り付けたエンドポイント アドレスとして SyncServer などの名前を入力します。以下のようなコードが出来上がります。

    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <endpoint address ="SyncServer" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>
    
  7. [ビルド] メニューの [ソリューションのビルド] をクリックします。

同期サービス操作を既存のデータ サービスに追加するには

  1. ソリューション エクスプローラで CustomersCache.Server.SyncContract ファイルをダブルクリックして開きます。

  2. クラスの名前を CustomersCacheSyncService から Service1 に変更します。クラス名を変更した後のクラス宣言は、以下のコードのようになります。(C# のユーザーは、コンストラクタの名前も変更する必要があります。)

    Partial Public Class Service1
        Inherits Object
        Implements ICustomersCacheSyncContract
    ...
    
    public partial class Service1 : object, ICustomersCacheSyncContract
    {...
    
  3. C# ユーザーの場合:

    Service1.cs ファイルで、Service1 のクラス宣言を以下のような部分クラスに変更します。

    public partial class Service1 : object, ICustomersCacheSyncContract {
    
    private CustomersCacheServerSyncProvider _serverSyncProvider;
    
    public Service1() 
    {...
    
  4. [ビルド] メニューの [ソリューションのビルド] をクリックします。

既存のサービスに同期操作が追加されたので、PresentationTier プロジェクトでサービスの参照を更新する必要があります。

サービス参照を更新するには

  1. ソリューション エクスプローラで、PresentationTier プロジェクトの ServiceReference1 を探します。

  2. [ServiceReference1] を右クリックし、[サービス参照の更新] をクリックします。

ローカル キャッシュから Customers データを読み込むようにフォームを変更する

プレゼンテーション層のフォームは、データ サービスからデータを取得するようになっています。したがって、SQL Server Compact 3.5 データベースにある Customers テーブルのローカル コピーからデータを読み込むようにコードを変更しなければなりません。Orders テーブルには、DataService から返されたデータが読み込まれます。

ローカル データベース キャッシュから Customers データを読み込むように Form1 を変更するには

  1. コード エディタで Form1 を開きます。

  2. 既存の Form1_Load コードを次のコードに置き換えます。

    Using DataSvc As New ServiceReference1.Service1Client
    
        ' Create a CustomersTableAdapter to load data from
        ' the local database cache.
        Dim CustomersTableAdapter As New LocalNorthwindCustomersTableAdapters.CustomersTableAdapter
    
        NorthwindDataSet.Customers.Merge(CustomersTableAdapter.GetData)
        NorthwindDataSet.Orders.Merge(DataSvc.GetOrders)
    End Using
    
    using (ServiceReference1.Service1Client DataSvc = new ServiceReference1.Service1Client())
    {
        LocalNorthwindCustomersTableAdapters.CustomersTableAdapter customersTableAdapter
           = new LocalNorthwindCustomersTableAdapters.CustomersTableAdapter();
        northwindDataSet.Customers.Merge(customersTableAdapter.GetData());
        northwindDataSet.Orders.Merge(DataSvc.GetOrders());
    }
    

アプリケーションのテスト

アプリケーションを実行します。ローカル データベース キャッシュとデータ サービスの両方からデータが取り込まれます。

アプリケーションをテストするには

  1. F5 キーを押します。

  2. Customers テーブルのデータはローカル データベースから、Orders テーブルのデータはデータ サービスから取り込まれます。

  3. フォームを閉じます

データの同期

プレゼンテーション層で正しいソースからテーブルを表示するための設定ができたので、次に、同期を開始するコードを追加します。さらに、同期処理を開始するボタンもフォームに追加します。

ローカル データベース キャッシュとリモート データベースのデータを同期するには

  1. デザイン ビューで [Form1] を開きます。

  2. フォームの ToolStrip をクリックして、ToolStrip にボタンを追加します。

  3. ボタンに SyncButton という名前を付けます。

  4. SyncButton をダブルクリックして、SyncButton_Click イベント ハンドラを作成します。

  5. 同期処理を開始するコードを以下に示します。このコードをイベント ハンドラに追加します。

    Dim syncAgent As CustomersCacheSyncAgent = New CustomersCacheSyncAgent
    
        Using syncClient As New ServiceReference1.CustomersCacheSyncContractClient
        syncAgent.RemoteProvider = New Microsoft.Synchronization.Data.ServerSyncProviderProxy(syncClient)
        Dim syncStats As Microsoft.Synchronization.Data.SyncStatistics = syncAgent.Synchronize
    
        NorthwindDataSet.Customers.Merge(New LocalNorthwindCustomersTableAdapters.CustomersTableAdapter().GetData())
    
        Dim syncSummary As String = "Total changes downloaded: " & _
           syncStats.TotalChangesDownloaded.ToString() & vbCrLf & _
           "Last successful synchronization: " & _
           syncStats.SyncCompleteTime.ToString
        MessageBox.Show(syncSummary)
    End Using 
    
    CustomersCacheSyncAgent syncAgent = new CustomersCacheSyncAgent();
    
    using (ServiceReference1.CustomersCacheSyncContractClient syncClient = new ServiceReference1.CustomersCacheSyncContractClient())
    {
        syncAgent.RemoteProvider = new Microsoft.Synchronization.Data.ServerSyncProviderProxy(syncClient);
        Microsoft.Synchronization.Data.SyncStatistics syncStats = syncAgent.Synchronize();
        northwindDataSet.Customers.Merge(new LocalNorthwindCustomersTableAdapters.CustomersTableAdapter().GetData());
    
        string syncSummary = "Total changes downloaded: " + 
        syncStats.TotalChangesDownloaded.ToString() + Environment.NewLine +
        "Last successful synchronization: " +
         syncStats.SyncCompleteTime.ToString();
        MessageBox.Show(syncSummary);
    }
    
  6. Customers テーブルのデータはローカル データベースから、Orders テーブルのデータはデータ サービスから取り込まれます。

  7. フォームを閉じます

アプリケーションのテスト

アプリケーションをテストするには

  1. F5 キーを押します。

  2. アプリケーションを実行している状態で、サーバー エクスプローラまたはデータベース エクスプローラ (または他のデータベース管理ツール) を使用し、リモート サーバー データベースに接続してレコードを変更します。

    1. サーバー エクスプローラまたはデータベース エクスプローラで、リモート データベース サーバー (Northwind.sdf への接続ではありません) 上の Customers テーブルを探します。

    2. Customers テーブルを右クリックし、[テーブル データの表示] をクリックします。

    3. 1 つ以上のレコードを変更し、変更をコミットします (変更した行以外に移動します)。

  3. フォームに戻り、[SyncButton] をクリックします。

  4. リモート データベースへの変更がローカル データベースと同期され、グリッドに表示されることを検証します。

  5. フォームを閉じます (デバッグを停止します)。

次の手順

n 層アプリケーションにローカル データベース キャッシュを追加した後で、アプリケーションの要件によってはさらに操作を追加する必要があります。たとえば、このアプリケーションで行うことができる拡張には次のものがあります。

参照

処理手順

方法 : n 層アプリケーションのデータセットにコードを追加する

チュートリアル : n 層データ アプリケーションへの検証の追加

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

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

方法 : ローカル データベースとリモート データベースで双方向同期を構成する

概念

n 層データ アプリケーションの概要

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

SQL Server Compact 3.5 と Visual Studio

データの新機能

その他の技術情報

階層更新

データへのアクセス (Visual Studio)