Microsoft Sync Frameworks簡稱MSF,是一個綜合的同步平台,MSF支援應用程式,服務,裝置的線上以及離線同步。MSF主要有以下幾個部件組成:
* Sync Services for ADO.NET: 同步ADO.NET的資料
* Sync Services for FeedSync: 同步 RSS 和 ATOM 種子
* Sync Services for File Systems: 同步檔案和檔案夾
* Sync Framework Core Runtime: 客戶化的同步方案,支援native code。
本文主要講述如何快速建立一個Sync Services for ADO.NET的應用進行資料同步。由于在PC的winform項目可以在使用向導快速建立同步程式,是以本文先介紹PC的webform程式上的Sync Services for ADO.NET開發,陸續會介紹移動裝置上的開發,這也是我最關心的部分。
先建立一個PC的winform程式。右鍵項目建立“New Item”,經過了Microsoft Synchronization Services for ADO.NET 的安裝,建立向導會出現“Local Database Cache”,選擇該類型。

圖1
在SQL Server Express上建立一個庫叫做TestDB,建立兩個表,表結構如下:
CREATE TABLE [dbo].[t1](
[f1] [int] NOT NULL,
[f2] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
CONSTRAINT [PK_t1] PRIMARY KEY CLUSTERED
(
[f1] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[t2](
[f2] [datetime] NOT NULL,
CONSTRAINT [PK_t2] PRIMARY KEY CLUSTERED
圖2
配置完資料庫伺服器後,可以選擇“Add”增加需要同步的表,在例子中選擇t1和t2。
圖3
如果資料表屬于下面的情況,那麼就不能顯示出來進行選擇:
1.不是使用者預設的原資料(user’s default schema)。
2.沒有定義主鍵。
3.名字長于118個字元。
4.字段中有SQL CE 3.5不支援的資料類型。
在預設選擇下向導會為原始表自動增加LastEditDate和CreationDate自動。同時增加資料表 (原表名_TombStone)。
在增加同步資料表完畢後,向導自動彈出增加資料源(DataSet)的向導,填寫DataSet的名字,選擇是以表格和字段。
圖4
系統會自動的生成處理類和資料類,如下圖
圖5
在程式中增加Load事件處理函數和增加一個按鈕以及處理函數,添加代碼如下:
public partial class Form1 : Form
{
TestDbDataSet testDbDataSet = new TestDbDataSet();
TestDbDataSetTableAdapters.t1TableAdapter t1TableAdapter = new TestDbDataSetTableAdapters.t1TableAdapter();
TestDbDataSetTableAdapters.TableAdapterManager tableAdapterManager = new TestDbDataSetTableAdapters.TableAdapterManager();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
tableAdapterManager.UpdateAll(testDbDataSet);
//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();
testDbDataSet.t1.Merge(t1TableAdapter.GetData());
private void Form1_Load(object sender, EventArgs e)
t1TableAdapter.Fill(testDbDataSet.t1);
}
一個從server同步到本地SQL CE的程式完成了。
TestDbDataSet: 表示一個強類型的記憶體資料緩存。
t1TableAdapter 表示用于取資料庫和儲存資料的connection和commands。
TableAdapterManager 用于協助TableAdapters之間關聯關系的更新(Hierarchical Update)。
在SQL Server Express裡的t1表格增加些資料,如下
圖6
運作程式,點選同步按鈕進行同步。
在VS2008打開SQL CE資料庫,你會發現SQL CE庫的資料和SQL Server Express裡的t1表格一模一樣。
修改,删除SQL Server Express裡的t1表格的資料,進行再測試,也會發現SQL CE庫同步在伺服器上的資料。
參考文獻
<a target="_blank" href="http://msdn.microsoft.com/en-us/library/bb902818.aspx">Overview and Scenarios (Sync Services)</a>
<a target="_blank" href="http://msdn.microsoft.com/en-us/library/bb902814.aspx">Sync Framework Overview</a>
<a target="_blank" href="http://msdn.microsoft.com/en-us/sync/cc470041.aspx">How to Choose a Data Synchronization Technology – Offline & Collaboration </a>
<a target="_blank" href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&ReleaseId=1713">Sync 101 - Getting Started with Sync Framework v2</a>
<a target="_blank" href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&ReleaseId=2214">Sync101 - (Windows Mobile) Device Synchronization</a>
<a target="_blank" href="http://www.codeproject.com/KB/database/AdoSyncServicesArticalPKg.aspx">Introduction to ADO.NET Sync Services</a>
本文轉自Jake Lin部落格園部落格,原文連結:http://www.cnblogs.com/procoder/archive/2009/04/17/1437686.html,如需轉載請自行聯系原作者