博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Microsoft Sync Framework下的快速开发同步程序
阅读量:6928 次
发布时间:2019-06-27

本文共 3106 字,大约阅读时间需要 10 分钟。

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开发,陆续会介绍移动设备上的开发,这也是我最关心的部分。

下载安装

请到以下链接下载 。 Microsoft Synchronization Services for ADO.NET本地缓存数据需要使用SQL CE 3.5,不能支持SQL CE 3.0。SQL CE 3.5和3.0的差异可以参考 

建立Local Database Cache

先建立一个PC的winform程序。右键项目新建“New Item”,经过了Microsoft Synchronization Services for ADO.NET 的安装,新建向导会出现“Local Database Cache”,选择该类型。

2009041707301123.png

图1

这个文件可以建立服务器与本地数据库的同步关系,服务器数据库可以为支持ADO.NET的任何数据库,我使用免费的SQL Server Express,本地数据库是SQL CE 3.5,可以不用手工建立,向导程序根据服务器数据自动生成本地数据库。SQL Server Express的下载安装可以参考 

在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](
 [f1] [
int
] NOT NULL,
 [f2] [datetime] NOT NULL,
 CONSTRAINT [PK_t2] PRIMARY KEY CLUSTERED 
(
 [f1] ASC
)WITH (PAD_INDEX  
=
 OFF, IGNORE_DUP_KEY 
=
 OFF) ON [PRIMARY]
) ON [PRIMARY]

 

选择数据库

 2009041707315743.png

图2

配置完数据库服务器后,可以选择“Add”增加需要同步的表,在例子中选择t1和t2。

2009041707321890.png

图3

如果数据表属于下面的情况,那么就不能显示出来进行选择:

1.不是用户默认的原数据(user’s default schema)。
2.没有定义主键。
3.名字长于118个字符。
4.字段中有SQL CE 3.5不支持的数据类型。

在默认选择下向导会为原始表自动增加LastEditDate和CreationDate自动。同时增加数据表 (原表名_TombStone)。

添加数据源(DataSet)

在增加同步数据表完毕后,向导自动弹出增加数据源(DataSet)的向导,填写DataSet的名字,选择所以表格和字段。

2009041707324485.png

图4

系统会自动的生成处理类和数据类,如下图

2009041707330478.png

图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表格增加些数据,如下

2009041707374841.png

图6

运行程序,点击同步按钮进行同步。

在VS2008打开SQL CE数据库,你会发现SQL CE库的数据和SQL Server Express里的t1表格一模一样。

修改,删除SQL Server Express里的t1表格的数据,进行再测试,也会发现SQL CE库同步在服务器上的数据。

 

参考文献

    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/04/17/1437686.html,如需转载请自行联系原作者

你可能感兴趣的文章
microsoft.sql.chainer.packagerdata.dll 0x84B10001解决方案
查看>>
让IE支持CSS 3圆角属性的方法(转)
查看>>
MySQL MyISAM与Innodb优化方案比较
查看>>
分享:C语言中Const指针变量(常指针)
查看>>
为ios 应用程序添加图标和添加名字
查看>>
学习C语言一些的好的书和网站
查看>>
[php] 如何将 simplexml_load_string 转换成数组array
查看>>
Ecshop探究之index.php
查看>>
WCF实例上下文以及会话学习
查看>>
Android系统中的广播(Broadcast)机制简要介绍和学习计划
查看>>
Properties 配置文件的读取
查看>>
[后缀数组、不重复子串]SPOJ694、spoj705--Distinct Substrings
查看>>
Mac OS X 10.8.3搭建Android工程源码的编译环境(解决找不到GCC、GIT、PYTHON的问题)...
查看>>
ruby/python/java全覆盖的Selenium-Webdriver系列教程(2)————浏览器的简单操作
查看>>
logcat
查看>>
实验五 含有控制信号的计数器VHDL设计
查看>>
ExtJs 通过分析源代码解决动态加载Controller的问题
查看>>
字符串相似度算法 递归与动态规划求解分析
查看>>
同步博客到CSDN
查看>>
VMware vSphere 服务器虚拟化之二十八 桌面虚拟化之安装View传输服务器
查看>>