HOW TO:在應用程式中設定資料同步處理
如果您的應用程式需要遠端資料庫中的資料,而不需要持續從資料庫中擷取資料 (或者未必持續可用),您就可以使用本機資料庫,透過應用程式將資料儲存在用戶端電腦上。
例如,假設有一個存貨應用程式,會使用資料庫中多張資料表的資料。 庫存中任何個別零件的項目數目是不斷變化的重要資料,所以應用程式必須反映資料庫中的目前值。 但是,應用程式也會顯示極少變動的有效貨運公司清單。 這些有效的貨運公司會儲存在貨運公司資料表中,而且也不必每次查詢資料庫中的資料時便擷取這些資訊。 如果將此 Shippers 資料表儲存在本機資料庫快取中,您就可以減少應用程式至遠端資料庫之間不必要的往返作業。 請考慮將極少變動的資料 (或以固定排程變更的資料) 儲存在本機資料庫快取中。
本機資料庫快取會使用 SQL Server Compact 3.5 資料庫,將資料儲存於本機。 您可以使用現有的 SQL Server Compact 3.5 資料庫,做為本機資料庫快取。 如果您還沒有本機資料庫,可以設定 [設定資料同步處理] 對話方塊來建立新的本機資料庫。
在您將本機資料庫加入至應用程式並完成 [設定資料同步處理] 對話方塊之後,還是必須將程式碼加入至應用程式中,才能啟始同步處理。 順利同步處理資料之後,您也必須加入程式碼,以重新填滿本機資料庫之資料集中的資料表。
注意事項 |
---|
[設定資料同步處理] 對話方塊可讓您僅針對下載狀況設定 Microsoft Synchronization Services for ADO.NET。 這表示當您使用 [設定資料同步處理] 對話方塊設定資料同步處理之後,呼叫 Microsoft.Synchronization.Data.SyncAgent.Synchronize 只會將遠端資料庫上發現的變更更新至本機資料庫。 對本機資料庫中的資料所做的變更將不會上載至遠端資料庫。 在您使用 [設定資料同步處理] 對話方塊設定資料同步處理後,可以透過程式設計的方式在同步處理期間啟用上載 (雙向同步處理)。 如需詳細資訊,請參閱 HOW TO:設定本機和遠端資料庫以進行雙向同步處理。 |
將本機資料庫快取加入至專案。
您可以將 .sync 檔案加入至專案,並使用 [設定資料同步處理] 對話方塊來進行設定,即可將應用程式設定為可在本機快取資料。 您可以使用 [加入新項目] 對話方塊,將 .sync 檔案加入至專案。
下列程序會提供與設定資料同步處理相關的基本步驟。 如需使用實際資料的範例,請參閱逐步解說:建立偶爾連接的應用程式。
注意事項 |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱 Visual Studio 設定。 |
若要設定資料同步處理
按一下 [專案] 功能表上的 [加入新項目]。
按一下 [本機資料庫快取] 範本。
提供替代名稱,或保留預設名稱 LocalDataCache1.sync。
按一下 [加入]。
.sync 檔案隨即加入至專案,並且 [設定資料同步處理] 對話方塊隨即開啟。
將 [伺服器連接] 設定為您要連接的目標遠端資料庫。
將 [用戶端連接] 設定為將在本機儲存資料的本機 SQL Server Compact 3.5 資料庫。 如果您沒有本機資料庫,可以保留預設值 <資料庫名稱>.sdf (新),在專案中建立新的資料庫。 新資料庫的名稱將依據 [伺服器連接] 中的資料庫名稱來命名。
注意事項 預設 [確定] 按鈕是停用的,將資料表加入至 [快取的資料表] 區域之後才會啟用該按鈕。
按一下 [加入] 以開啟 [設定離線使用的資料表] 對話方塊,然後選取及設定資料庫資料表以加入至本機資料庫快取。
選取您要加入至本機資料庫快取的資料庫資料表,然後設定下列各個項目:
要下載的資料
第一次同步處理之後新的及累加的變更
這個設定會從伺服器中,擷取自前次同步處理資料以後所修改的資料錄。 第一次呼叫同步處理時,將會下載整個資料表。
每次都用完整資料表
這個設定會捨棄本機資料表,並以伺服器上的版本來取代。
比較更新 - 使用
將此項設定為所選取資料表中的資料行名稱,可用於追蹤前次更新資料錄的時間。 根據預設,任何定義為 datetime 或 timestamp 的資料行都將出現在此清單中。 如果資料表中不含用於追蹤修改之資料錄的資料行,您可以保留預設值 [LastEditDate (新)],這樣將為您建立追蹤資料行。
比較插入 - 使用
將此項設定為所選取資料表中的資料行名稱,這個資料行可用於追蹤將新資料錄加入至資料表的時間。 根據預設,任何定義為 datetime 或 timestamp 的資料行都將出現在此清單中。 如果資料表中不含用於追蹤新資料錄的資料行,您可以保留預設值 [CreationDate (新)],這樣將為您建立追蹤資料行。
將刪除的項目移至
將此項設定為資料庫伺服器上的資料表,這個資料表可用於儲存刪除的資料錄。 根據預設,任何命名為 <資料表名稱>_Deleted 或 <資料表名稱>_Tombstone 的資料表都將出現在此清單中。 如果資料庫中不含用於儲存刪除之項目的資料行,您可以保留預設值 <資料表名稱>_Tombstone (新),這樣將為您建立刪除的項目資料表。
注意事項 針對要設定為離線使用的每個資料表進行這些設定。
根據預設,[指令碼產生] 選項會自動設定,以產生並執行可用於設定資料庫伺服器的伺服器端指令碼。 如果您不需要這些指令碼,或者無法存取資料庫伺服器,則可以清除該選項並手動執行指令碼或修改資料表。 如果不需要對伺服器做任何變更,則不會產生任何指令碼。
注意事項 這些指令碼會將追蹤資料行加入至選取的資料表、建議用於儲存已刪除項目的資料表,並在資料表上,加入一些必須追蹤「插入」、「更新」和「刪除」作業 (設定供本機快取使用) 的觸發程序 (Trigger)。
按一下 [確定]。
按一下 [顯示程式碼範例] 開啟 [程式碼範例] 對話方塊,其中會提供可啟動同步處理程序的程式碼片段。 您可以將此片段複製到剪貼簿,再插入程式中。
您可以選擇性地設定 [進階] 選項。
[設定資料同步處理] 對話方塊上的 [進階] 選項可提供設定,讓您控制是否要個別同步處理資料表或在單一交易中處理。 這些選項也可允許進行 N-Tier 應用程式的程式碼分隔作業。
在單一交易中同步處理資料表: 預設不會核取這個選項,所有資料表都是個別同步處理。 如果發現錯誤,只會復原發生錯誤之資料表的變更。 如果核取這個選項,則會在單一交易中同步處理所有資料表。 如果發現錯誤,則會復原所有資料表的所有變更。
建立同步處理元件: 根據預設,會針對用戶端和伺服器產生同步處理元件。 您可以將此選項設定為 [只在用戶端] 或 [僅限伺服器],以符合應用程式的需求。
伺服器專案位置: 根據預設,將在目前的專案中針對伺服器產生同步處理元件。 設定此選項,便可以針對伺服器將同步處理元件產生至方案中的任何 Visual Basic 或 Visual C# 專案。
用戶端專案位置: 根據預設,將在目前的專案中針對用戶端產生同步處理元件。 設定此選項,便可以針對用戶端將同步處理元件產生至方案中的任何 Visual Basic 或 Visual C# 專案。
完成 [設定資料同步處理] 對話方塊之後,您必須將程式碼加入至應用程式以啟始同步處理。
注意事項 |
---|
同步處理資料會更新本機資料庫,而不是資料集中的資料表或應用程式中的任何其他物件。 記得使用本機資料庫的更新資料來重新載入您的應用程式資料來源。 例如,呼叫 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.