天天看点

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,如需转载请自行联系原作者