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