共用方式為


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

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:設定本機和遠端資料庫以進行雙向同步處理

概念

多層式架構資料應用程式概觀

偶爾連接的應用程式概觀

SQL Server Compact 3.5 和 Visual Studio

資料應用程式開發的新功能

其他資源

階層式更新

存取 Visual Studio 中的資料