SQL Server Compact Edition 与SQL Server 2005数据同步之 请求和推送
一、 前言
相信有Windows CE 或 Windows Mobile 开发经验的人员都或多或少要对移动终端的数据进行推送至SQL Server或是向SQL Server请求数据。但是用什么方法进行呢?相信大家立即会想到Microsoft ActiveSync,这也是个不错的选择,但这个方法只是针对文件的Copy、Paste、Delete等操作,还是有一定的局限性。另外大家也会想到经TCP/IP通过Socket或Web Service等进行数据同步,直接向SQL Server请求和推送数据,但是这个难度就在于Socket或Web Service的开发了。本文将介绍通过“RDA(远程数据访问)”方法,给大家参考,只要少少代码和设置便可以轻松实现了。
二、 创建快照文件夹
1 打开资源管理器中,在C盘下创建一个名为snapshot的新文件夹。右键单击snapshot文件夹,然后选择共享和安全。
2 在共享选项卡,选择共享该文件夹,然后单击权限。
3 在共享权限页中,单击添加。
4 单击高级,单击立即查找,选择登陆用户名,单击确定。
5 在snapshot的权限中,为刚才分配的用户选中更改和读取权限,然后单击确定。
6 选择安全选项卡,单击添加,添加刚才的用户到用户列表中。
7 选择用户,分配以下权限:
- 读取和执行
- 列出文件夹目录
- 读取
- 写入
8 单击确定关闭快照属性窗口。
9 关闭 Windows 资源管理器。
注:如果你的电脑启用了简单文件夹共享,请选择工具,单击文件夹选项,在查看选项页中去除简单文件夹共享。这样才看到第2步以下的内容。
三、 配置SQL Server Compact的Web同步。
如果你的PC上没有安装Microsoft SQL Server 2005 Compact Edition Server Tools,请到http://www.microsoft.com/downloads/details.aspx?FamilyId=4E45F676-E69A-4F7F-A016-C1585ACF4310&displaylang=zh-cn 进行下载。
1 单击开始->所有程序-> Microsoft SQL Server 2005 Compact Edition->配置 Web 同步向导。
2 在欢迎使用配置 Web 同步向导页上,单击下一步。
3 在订阅服务器类型页上,选择SQL Server Compact Edition,单击下一步。
4 在Web 服务器页中,选择创建新的虚拟目录,然后选择默认网站。单击下一步。剩余的步骤用于创建新的虚拟目录。
5 在虚拟目录信息页上,在别名文本框中,输入虚拟目录名称。在路径文本框中设置虚拟目录的本地文件路径(可默认),然后单击下一步。
6 在安全通信页上,默认选择不需要使用安全通道(SSL)。用户将通过以 http:// 开头的 URL 字符串访问您的虚拟目录,然后单击下一步。
7 在客户端身份验证页上,选择将对客户端进行身份验证。要求输入用户名和密码,然后单击下一步。
8 在“需经身份验证的访问”页上,选择要使用的身份验证类型,这里选择集成 Windows 身份验证。然后单击下一步。
9 在目录访问页上,添加登陆用户权限,然后单击下一步。
10 在快照共享访问页上,选择每第一步中的快照,然后单击下一步。
11 单击完成,完成创建并配置虚拟目录后,单击关闭。 注:你的PC机上必需安装有IIS
四、 建立测试数据库
1 打开SQL Server Management Studio,新建查询,输入以下内容:
USE master;
GO
IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'SQLMobile')
BEGIN
DROP Database SQLMobile;
END
GO
CREATE DATABASE SQLMobile;
GO
USE SQLMobile;
GO
CREATE TABLE Test (ID INTEGER IDENTITY (1,1)
CONSTRAINT pkID PRIMARY KEY, Test NVarChar (50));
GO
insert into Test (Test) values('Test1')
insert into Test (Test) values('Test2')
GO
打开Windows CE 的Query Analyzer 在路径/Program Files/SQLMobile下建立命名为sqlmobile的测试数据库。
五、 建立示例程序
1 打开Microsoft Visual Studio 2005,建立Windows CE的Device Application应用程序,命名为SQLMobile。
2 删除菜单,添加两个button,并命名为Push(推送)和Pull(请示),闰添加单击事件。
3 在程序中添加System.Data.SqlServerCe的引用,并Using到程序中。
4 在Push的单击事件中添加以下代码:
string ConnectString = @"Provider=SQLOLEDB; Data Source=***; Initial Catalog=SQLMobile; User ID=sa;Password = ***";
SqlCeRemoteDataAccess rda = null;
try
{
rda = new SqlCeRemoteDataAccess(@"http://192.168.1.3/SQLMobile/sqlcesa30.dll", @"Data Source=/Program Files/sqlmobile/test.sdf");
rda.InternetLogin = "***";
rda.InternetPassword = "***";
rda.Push("Test", ConnectString, RdaBatchOption.BatchingOff);
MessageBox.Show("Push OK.");
}
catch (SqlCeException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
rda.Dispose();
}
5 在Pull的单击事件中添加以下代码:
string ConnectString = @"Provider=SQLOLEDB; Data Source=***; Initial Catalog=SQLMobile; User ID=sa;Password = ***";
SqlCeRemoteDataAccess rda = null;
try
{
rda = new SqlCeRemoteDataAccess(
@"http://192.168.1.3/SQLMobile/sqlcesa30.dll",
"***",
"***",
@"Data Source=/Program Files/sqlmobile/test.sdf ");
rda.Pull("Table_1", "SELECT * FROM Table_1", ConnectString,
RdaTrackOption.TrackingOnWithIndexes);
MessageBox.Show("Pull OK.");
}
catch (SqlCeException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
rda.Dispose();
}
6 将程序下载到移动终端机上,进行测试。
六、 测试
打开SQLMobile程序,点击Pull,出现MessageBox“Pull OK.”即已经将表Test请求到了本地sqlmobile.sdf数据库中。
在sqlmobile.sdf,添加两行数据后,点击Push,出现MessageBox“Pusk OK.”,即已经将新增的两行数据添加到了SQL Server的Test表中。
七、 问题汇总
1 A request to send data to the computer running IIS has failed。For more information, see HRESULT.
些问题请查看你的IIS配置,用户名或密码。
2 Failure to Open SQL Server with given connect string, […..]
此问题请查看你的防火墙设置和你的SQL Server用户名和密码。
3 The Local Table Name parameter is already specified. [Table name = Test]
此问题是因为windows CE中已经存在名为Test的表,将此表删除即可。
4 SQL Mobile encountered problems when opening the database.
此问题是你的sqlmobile.sdf 数据库密码错误,如果有密码请更改连接字符串为:Data Source=/Program Files/SQLMobile/sqlmobile.sdf;Password=**
需要source的朋友请电邮至niyingny@hotmail.com