天天看點

Microsoft Sync Framework下的快速開發同步程式

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”,選擇該類型。

Microsoft Sync Framework下的快速開發同步程式

圖1

在SQL Server Express上建立一個庫叫做TestDB,建立兩個表,表結構如下: 

Microsoft Sync Framework下的快速開發同步程式

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 

Microsoft Sync Framework下的快速開發同步程式
Microsoft Sync Framework下的快速開發同步程式

圖2

配置完資料庫伺服器後,可以選擇“Add”增加需要同步的表,在例子中選擇t1和t2。

Microsoft Sync Framework下的快速開發同步程式

圖3

如果資料表屬于下面的情況,那麼就不能顯示出來進行選擇:

1.不是使用者預設的原資料(user’s default schema)。

2.沒有定義主鍵。

3.名字長于118個字元。

4.字段中有SQL CE 3.5不支援的資料類型。

在預設選擇下向導會為原始表自動增加LastEditDate和CreationDate自動。同時增加資料表 (原表名_TombStone)。

在增加同步資料表完畢後,向導自動彈出增加資料源(DataSet)的向導,填寫DataSet的名字,選擇是以表格和字段。

Microsoft Sync Framework下的快速開發同步程式

圖4

系統會自動的生成處理類和資料類,如下圖

Microsoft Sync Framework下的快速開發同步程式

圖5

在程式中增加Load事件處理函數和增加一個按鈕以及處理函數,添加代碼如下:

Microsoft Sync Framework下的快速開發同步程式

    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);

    }

Microsoft Sync Framework下的快速開發同步程式

 一個從server同步到本地SQL CE的程式完成了。

 TestDbDataSet: 表示一個強類型的記憶體資料緩存。

 t1TableAdapter 表示用于取資料庫和儲存資料的connection和commands。

 TableAdapterManager 用于協助TableAdapters之間關聯關系的更新(Hierarchical Update)。

在SQL Server Express裡的t1表格增加些資料,如下

Microsoft Sync Framework下的快速開發同步程式

圖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 &amp; Collaboration </a>

<a target="_blank" href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;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&amp;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,如需轉載請自行聯系原作者