共用方式為


逐步解說:將本機資料庫快取加入至 N-Tier 應用程式

更新:2007 年 11 月

Visual Studio 內容中的「本機資料庫快取」(Local Database Cache) 為 SQL Server Compact 3.5 資料庫,可設定為使用 Microsoft Synchronization Services for ADO.NET 來同步處理資料和遠端資料庫。本逐步解說提供逐步指示,說明如何將 SQL Server Compact 3.5 資料庫加入至逐步解說:建立 N-Tier 資料應用程式主題中建立的應用程式。

在此逐步解說中,您將學習如何執行下列工作:

  • 將本機資料庫快取項目加入至專案。

  • 設定資料同步處理。

  • 將同步處理作業納入現有的資料服務。

  • 修改會載入資料的程式碼,讓該程式碼可從本機資料庫快取擷取 Customers 資料表。

  • 加入程式碼以啟始同步處理。

必要條件

若要完成這個逐步解說,您需要下列項目:

注意事項:

您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定

開啟 NTierWalkthrough 方案

若要開啟 NTierWalkthrough 方案

將本機資料庫快取加入至 NTierWalkthrough

由於本機資料庫快取是位於用戶端的 SQL Server Compact 3.5 資料庫,因此請將本機資料庫快取加入至 PresentationTier 專案。由於本逐步解說會說明如何快取 Customers 資料表,因此您必須將本機資料庫快取命名為 CustomersCache。

注意事項:

在本逐步解說中,本機資料庫快取的名稱為 CustomersCache,這是因為它只使用 Customers 資料表,但本機資料庫快取可以包含多個資料表。

若要將本機資料快取加入至展示層

  1. 以滑鼠右鍵按一下 [方案總管] 中的 [PresentationTier],然後按一下 [加入新項目]。

  2. 按一下 [本機資料庫快取] 範本。

  3. 在 [名稱] 中輸入 CustomersCache。

  4. 按一下 [加入]。

    [設定資料同步處理] 對話方塊隨即開啟。

設定資料同步處理

若要設定資料同步處理,請選取伺服器的資料連接,然後選取您要在應用程式中進行本機快取的資料表。針對本逐步解說,請將伺服器連接設定為 Northwind 資料庫的 SQL Server 版本,並將 Customers 資料表加入至本機快取。此外,由於您正要將本機資料庫快取加入至 N-Tier 應用程式,因此必須設定進階選項以在不同的專案 (DataService) 中產生伺服器同步處理元件。

若要在 N-Tier 應用程式中設定資料同步處理

  1. 將 [伺服器連接] 設定為 Northwind 資料庫的 SQL Server 版本。

  2. 按一下 [加入] 按鈕,開啟 [設定離線使用的資料表] 對話方塊。

  3. 選取與 [Customers] 資料表相關聯的核取方塊,然後按一下 [確定] (保留所有預設值)。

  4. 按一下 [進階]。

  5. 選取 [伺服器專案位置] 清單中的 [DataService]。

  6. 按一下 [確定]。

    同步處理元件、首次同步處理資料 (在專案中建立本機資料庫並填入資料) 隨即產生,並且資料來源組態精靈隨即開啟。

  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 的類別宣告 (在 Service1.cs 檔中),使其成為部分類別,讓宣告看起來如下:

    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 資料表的本機複本載入資料。不過仍會使用 DataService 傳回的資料載入 Orders 資料表。

若要修改 Form1 以便從本機資料庫快取載入 Customers 資料

  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. 在 [伺服器總管]/[資料庫總管] 中,找出遠端資料庫伺服器上的 [Customers] 資料表 (不是 Northwind.sdf 的連接)。

    2. 以滑鼠右鍵按一下 [Customers] 資料表,然後按一下 [顯示資料表資料]。

    3. 修改一筆或多筆記錄並認可變更 (巡覽修改過的資料列)。

  3. 返回表單並按一下 [SyncButton]。

  4. 確認遠端資料庫的修改已同步處理至本機資料庫,並顯示在方格中。

  5. 關閉表單 (停止偵錯)。

後續步驟

視應用程式的需求而定,在您將本機資料庫快取加入至 N-Tier 應用程式之後,可能還要執行幾個步驟。例如,您可以進行下列作業讓這個應用程式發揮更強的功能:

請參閱

工作

HOW TO:將程式碼加入 N-Tier 應用程式中的資料集

逐步解說:將驗證加入至 N-Tier 資料應用程式

逐步解說:建立偶爾連接的應用程式

逐步解說:將偶爾連接的用戶端應用程式與本機資料庫一起部署

HOW TO:設定本機和遠端資料庫以進行雙向同步處理

概念

N-Tier 資料應用程式概觀

偶爾連接的應用程式概觀

SQL Server Compact 3.5 和 Visual Studio

資料的新功能

其他資源

階層式更新

存取資料 (Visual Studio)