偶爾連接的應用程式概觀
「偶爾連接的應用程式」(Occasionally Connected Application) 是一種應用程式,它會使用遠端資料庫中的資料,但可能不一定具備遠端資料庫的存取權。 當可以持續進行存取,但是持續查詢遠端資料庫中鮮少變動的資料 (例如狀態清單或產品分類) 會造成效率不彰時,也會使用到偶爾連接的應用程式。 在這種情況下,應用程式可以使用位於用戶端上本機資料庫中的資料,且定期與伺服器上的遠端資料庫同步處理資料。
也就是說,如果您的應用程式需要遠端資料庫中的資料,而不需要持續從資料庫中擷取資料,您就可以使用本機資料庫快取,將資料儲存在用戶端電腦或直接存在應用程式中。 例如,假設有一個存貨應用程式,會使用資料庫中多張資料表的資料。 庫存中任何個別零件的項目數目是不斷變化的重要資料,所以,應用程式必須盡可能反映資料庫中的目前值。 但是,應用程式也會顯示極少變動的有效貨運公司清單。 這些有效的貨運公司會儲存在貨運公司資料表中,而且也不必每次查詢資料庫中的資料時便擷取這些資訊。 將貨運公司資料表儲存在本機資料庫快取中,您就可以減少應用程式至遠端資料庫之間不必要的往返作業。 所以,除了讓偶爾連接的應用程式使用本機資料庫快取外,您還可以考慮將不常變動或是按照已知的排程變動的資料儲存在本機資料庫快取中。
您可以設定快取以儲存個別資料表、資料表組或擷取自資料表中的特定記錄 (例如,僅限有特定業務代表的客戶)。
用戶端和伺服器資料庫之間的資料同步處理,是透過 Microsoft Synchronization Services for ADO.NET (Microsoft.Synchronization.Data 命名空間) 執行的。 您可以在 Visual Studio 中使用 [設定資料同步處理] 對話方塊,以視覺化方式設定同步處理,或在建立具型別資料集時使用 [資料來源組態精靈] 進行設定。 如需詳細資訊,請參閱 HOW TO:在應用程式中設定資料同步處理和逐步解說:使用資料來源組態精靈建立偶爾連接的應用程式。
此外,Visual Studio 也支援 SQL Server 2008 變更追蹤功能。 當您從 [設定資料同步處理] 對話方塊或 [資料來源組態精靈] 設定同步處理時,可以啟用 SQL Server 2008 變更追蹤。 如需詳細資訊,請參閱 HOW TO:設定資料同步處理以使用 SQL Server 變更追蹤。
SQL Azure 中的本機資料庫快取限制
您可以使用本機資料庫快取,將 SQL Azure 中的資料與本機 SQL Compact 資料庫同步處理。 但是,在雲端式服務 (例如 SQL Azure) 所使用的多組織用戶共享環境中,客戶雖然共用相同的硬體,但現有的資料提供者並未針對多組織用戶共享環境進行最佳化。 為防止某個客戶因其他客戶所啟始的工作負載而受到衝擊,SQL Azure 會使用節流機制來限制授與單一要求的資源量。 更明確地說,SQL Azure 會限制單一交易的執行時間,以及針對單一交易增加的記錄檔數量。
如果是基本情節和少量資料,您應該使用這些提供者。 如果您嘗試同步大量資料,同步作業將可能因為節流問題而失敗。 如果發生節流問題,您還是必須進行許多變更來避免同步失敗。 對於需要雙向同步處理的進階情節,這些提供者更不適用。
如需進一步了解已針對與 SQL Azure 有關之情節進行最佳化的元件,請參閱 https://go.microsoft.com/fwlink/?LinkId=180745 (英文)。
Synchronization Services API (Microsoft.Synchronization.Data)
Microsoft Synchronization Services for ADO.NET 是專為偶爾連接的應用程式所設計。 可讓您從不同的來源同步處理資料,包括兩層式 (Two-Tier)、N-Tier 和服務式架構。 Synchronization Services API 不只是複製資料庫及其結構描述,還提供元件組以同步處理資料服務和本機存放區之間的資料。 越來越多行動用戶端開始使用應用程式,例如筆記型電腦和行動裝置,這些裝置都沒有持續或穩定的中央伺服器網路連接。 這些應用程式必須使用位於用戶端上之資料的本機複本。 同樣重要的是,當網路連接可使用時,必須同步處理資料的本機複本和中央伺服器上的資料。 Synchronization Services API 採取 ADO.NET 資料存取 API 的模式,提供直覺式的方式讓您同步處理資料。 這麼做會使建立應用程式供偶爾連接的環境使用,變成建立您可以依賴持續網路連接之應用程式的邏輯延伸。
安裝 Synchronization Services API 和說明文件
Synchronization Services API 並不屬於 .NET Framework 的一部分。 它已安裝做為 「 SQL Server 精簡 」 安裝的一部分。(預設情況下,SQL Server 壓縮是在安裝時安裝Visual Studio。)預設情況下, Synchronization Services未安裝文件。 因此,只有當 [說明] 設定為線上使用時,才可使用該說明文件。 若要安裝 Synchronization Services 說明文件以便在本機使用,您必須先從 Microsoft Synchronization Services for ADO.NET 線上叢書 網站下載說明集合。
使用 Visual Studio 將資料同步處理加入至應用程式
為了將資料同步處理與您的應用程式整合,Visual Studio 提供了 [本機資料庫快取] 範本。 [本機資料庫快取] 可做為新的專案項目範本使用 (按一下 [專案] 功能表上的 [加入新項目])。 如需詳細資訊,請參閱 HOW TO:在應用程式中設定資料同步處理。
除了使用 [本機資料庫快取] 範本之外,您也可以使用 [資料來源組態精靈] 設定同步處理。 在設定具型別資料集期間,在精靈的 [選擇您的資料庫物件] 頁面中,選取 [啟用本機資料庫快取] 選項。 如需詳細資訊,請參閱逐步解說:使用資料來源組態精靈建立偶爾連接的應用程式。
加入 [本機資料庫快取] 會開啟 [設定資料同步處理] 對話方塊。 您要使用這個對話方塊來提供有關用戶端及伺服器的特定資訊,才能設定必要的同步處理元件。 本機資料庫快取會使用用戶端上的 SQL Server 壓縮的資料庫來儲存在本機上的資料。 您可以使用現有的 SQL Server 壓縮資料庫當做本機資料庫快取。 如果您還沒有本機資料庫,可以使用 [設定資料同步處理] 對話方塊建立新的本機資料庫。 若要建立新的本機 SQL Server 壓縮資料庫,您可以設定用戶端連線 (在 設定資料同步處理 對話方塊) 來建立新的 SQL Server 壓縮資料庫根據 [從選取的資料表 伺服器連線。
注意事項 |
---|
[設定資料同步處理] 對話方塊可讓您僅針對下載狀況設定 Microsoft Synchronization Services for ADO.NET。這表示當您此對話方塊設定資料同步處理之後,呼叫 Microsoft.Synchronization.Data.SyncAgent.Synchronize 只會將遠端資料庫的變更更新至本機資料庫。對本機資料庫中的資料所做的變更將不會上載至遠端資料庫。在您使用 [設定資料同步處理] 對話方塊設定資料同步處理後,可以透過程式設計的方式在同步處理期間啟用上載 (雙向同步處理)。如需詳細資訊,請參閱 HOW TO:設定本機和遠端資料庫以進行雙向同步處理。 |
設定遠端資料庫以進行同步處理
若要順利執行資料同步處理,則在您要同步處理的遠端資料庫上,每一張資料表都需要新增一些項目。 [設定資料同步處理] 對話方塊會建立 SQL 指令碼,針對建立必要物件 (物件列於下表) 的遠端資料庫執行。 由同步處理設計工具所建立的所有 SQL 指令碼都會儲存在專案中的 SQLScripts 資料夾裡。
注意事項 |
---|
預設會執行 [設定資料同步處理] 對話方塊所產生的 SQL 指令碼。您可以設定 [設定離線使用的資料表] 對話方塊中的 [指令碼產生] 選項,選擇是否要產生及執行指令碼。 [設定資料同步處理] 對話方塊的預設行為,是自動執行指令碼,並在關閉對話方塊時更新遠端資料庫。如果您不想要自動執行指令碼,請清除 [在此對話方塊關閉時執行指令碼] 核取方塊。此外,如果遠端資料庫已有必要的追蹤資料行、觸發程序和刪除的項目資料表,就不會產生指令碼。也就是說,如果遠端資料庫不需要變更,就不會產生指令碼。 |
下表列出遠端資料庫上所需的項目,並提供每一個項目的說明:
遠端資料庫上每一張已同步處理之資料表的增加項目 |
說明 |
---|---|
LastEditDate 資料行 |
這個資料行必須是正在同步處理的每一張資料表上的 DateTime 或 TimeStamp。 它會和用戶端上的 LastEditDate 資料行進行比較,以識別自從上次同步處理呼叫後,伺服器上修改過的記錄。 |
CreationDate 資料行 |
這個資料行必須是正在同步處理的每一張資料表上的 DateTime 或 TimeStamp。 它會和用戶端上的 CreationDate 資料行進行比較,以識別自從上次同步處理呼叫後,加入至伺服器的記錄。 |
刪除的項目資料表 (TableName_Deleted) |
刪除資料庫伺服器上的資料表中的項目時,項目會移至這張資料表。 這麼做是為了識別從上次同步處理呼叫後,從伺服器中刪除的記錄。 每一張同步處理的資料表都需要刪除的項目資料表,以追蹤遠端資料表中刪除的記錄。 |
DeletionTrigger (TableName_DeletionTrigger) |
每次從伺服器資料庫資料表中刪除記錄時,就會執行這個觸發程序。 刪除的記錄會移至刪除的項目資料表中。 項目會移至刪除的項目資料表,因為不在伺服器資料庫中的用戶端資料庫裡的記錄,會被視為新的記錄並加回到伺服器中。 Synchronization Services 會檢查刪除的項目資料表,以判斷是否應刪除用戶端資料庫中已刪除的記錄,而不是放回伺服器資料庫。 |
InsertTrigger (TableName_InsertTrigger) |
加入新的資料錄時,這個觸發程序會以目前的日期和時間填入 CreationDate 資料行。 |
UpdateTrigger (TableName_UpdateTrigger) |
修改現有的記錄時,這個觸發程序會以目前的日期和時間填入 LastEditDate 資料行。 |
從應用程式啟動同步處理程序
在 [設定資料同步處理] 對話方塊中提供必要的資訊時,將程式碼加入至您的應用程式以初始化同步處理。 您必須了解,執行資料同步處理會更新的是本機資料庫,而不是資料集中的資料表或應用程式中的任何其他物件。 記得使用本機資料庫的更新資料來重新載入您的應用程式資料來源。 例如,呼叫 TableAdapter.Fill 方法,將本機資料庫中更新過的資料載入資料集的資料表中。
請參閱
工作
概念
SQL Server Compact 4.0 和 Visual Studio