摘要:本文通过一个简单实例,介绍了在.net环境下,如何利用RDA(Remote Data Access)方式进行SQLCE与SQL SERVER之间的数据库同步,并且如何使用SQLCE的相关类创建和访问SQLCE数据库。
关键词:RDA, SQLCE, SQL SERVER
1 引言
SQL Server CE(SQLCE)是一款运行在Windows CE设备环境下的轻量级本地数据库引擎,为移动设备上偶尔连接的数据访问提供了解决方案。例如,工商管理人员在执行巡查任务前,可以用Win CE移动设备把台式计算机中的数据库(SQL Server)拷到Win CE的数据库(SQLCE)上;在执行任务时,可以在移动设备上修改记录;完成任务后,可以把移动设备上的数据库上传到台式计算机中的数据库,使这两个数据库之前的数据保持同步。Remote Data Access(RDA)方式为Win CE移动设备上SQLCE与SQL Server数据库之间的同步提供了快速而简便的解决方案。本文将通过一个实例演示如何使用RDA方式同步数据库。
2 开发环境
本文的实例程序开发环境如下:Microsoft Visual Studio 2005,编程语言C#,数据库采用
SQL Server2000,SQL Server Mobile Edition 2005(SQLCE3.0),程序测试运行环境为Windows CE5.0(使用vs上自带的Pocket PC 2003 SE 仿真程序)。
SQL Server2000必须安装SP3补丁,SQL Server Mobile Edition 2005的安装文件在Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v3.0目录下,文件名为Sqlce30setupcn.msi。安装SQL Server Mobile Edition 2005后,使用该程序菜单中的“配置Web同步向导”创建一个别名为“sqlce3”的虚拟目录,访问方式为“匿名”。注意:创建虚拟目录后,还必须打开IIS,把虚拟目录“sqlce3”的访问权限增加“写入”权限,否则RDA将同步失败。
3 程序的实现
运行SQL SERVER2000服务器管理器。打开企业管理器,创建一个新数据库,名为“ABC”,在“ABC”下创建一个数据表,表名为:“person”,表字段如下图所示:
图1 person表
运行Microsoft Visual Studio 2005,创建一个新项目,项目类型为“Visual C# ->智能设备->Windows CE5.0->设备应用程序”,项目名为“RDA_TEST”。接着是程序的编写
第一步,需引入两个名命空间:System.IO和System.Data.SqlServerCe。接着在windows CE设备上创建一个空的本地SQLCE数据库,代码如下:
//创建一个空的本地数据库文件,
string dbPathName = @"\rda.sdf";
if (File.Exists(dbPathName))
File.Delete(dbPathName);
string strCon = "Data Source =" + dbPathName + "; Password=";
SqlCeEngine engine = new SqlCeEngine(strCon);
engine.CreateDatabase();
engine.Dispose();
代码中使用了SqlCeEngine类,用于创建SQLCE数据库,注意创建SqlCeEngine对象时所使用的参数,此参数为一个数据库连接字符串,注意其格式。
第二步,用SQL SERVER2000中的数据库同步SQLCE数据库。代码如下:
SqlCeRemoteDataAccess rda = null;
//SQL Server所在的主机的IP
string remoteIP = tbRemoteIP.Text.Trim();
//SQL Server中的数据库,名为ABC
string remoteDB = "ABC";
//数据库ABC的用户和密码
string user = "sa";
string pwd = "sa";
//本地sqlce数据库的路径和名字,该数据库存在于win CE系统下.
// dbPathName= @"\rda.sdf";
string localDB = dbPathName;
//本地sqlce数据库密码
string localPwd = "";
//要同步的数据表名
string table = "person";
//用于连接SQL Server数据库的字符串
string rdaOleDbConnectString = @"Provider=SQLOLEDB;Data Source=" + remoteIP +
";Initial Catalog=" + remoteDB + ";User Id=" + user + ";Password =" + pwd;
//连接本地sqlce数据库的字符串,作为SqlCeRemoteDataAccess对象的一个参数
string localConnectString = @"Data Source=" + localDB + ";Password=" + localPwd;
rda = new SqlCeRemoteDataAccess();
//由于虚拟目录sqlce3设置的访问方式为匿名,所以登陆名和密码可以忽略
rda.InternetLogin = "";
rda.InternetPassword = "";
rda.InternetUrl = "http://" + remoteIP + "/sqlce3/sqlcesa30.dll";
rda.LocalConnectionString = localConnectString;
//执行同步,SQL SERVER同步到sqlce
//参数RdaTrackOption.TrackingOn指示SQL Server Mobile 跟踪对所提取表的所有更改。
rda.Pull(table, "Select * from " + table, rdaOleDbConnectString, RdaTrackOption.TrackingOn);
RDA同步数据库主要是使用SqlCeRemoteDataAccess类。从别的数据库更新本地SQLCE数据库,使用SqlCeRemoteDataAccess类的Pull方法,该方法中的参数RdaTrackOption.TrackingOn,可以让SQLCE跟踪对本地数据表的更改,从而可以用SQLCE同步SQL SERVER数据库。
第三步,对SQLCE数据库进行修改,这一步只是为了演示用SQLCE同步SQL SERVER数据库而作准备。代码如下:
const string strDatabase = @"Data Source = \rda.sdf";
SqlCeConnection con = null;
con = new SqlCeConnection(strDatabase);
con.Open();
//修改现有记录
string strUpdate = "update person set age=18 where name = '王一'";
SqlCeCommand cmd = new SqlCeCommand(strUpdate, con);
cmd.ExecuteNonQuery();
cmd.Dispose();
//插入一条新记录
strUpdate = "insert into person(card_id,name,age) values(10003,'李四',23)";
cmd = new SqlCeCommand(strUpdate,con);
cmd.ExecuteNonQuery();
cmd.Dispose();
第四步,用SQLCE同步SQL SERVER2000数据库,也就是把SQLCE数据库修改过的记录更新到SQL SERVER2000数据库上。代码跟第一步所列代码基本一致,但只把第一步代码的最后两行关于pull方法的代码,改为push方法代码, 代码如下:
//执行同步,sqlce同步到SQL Server
//参数RdaBatchOption.BatchingOn指示SQL Server Mobile 将推入SQL Server 中的//所有行组成一批,归并到一个事务中。
rda.Push("person", rdaOleDbConnectString, RdaBatchOption.BatchingOn);
4 程序的运行结果
(1)图2为程序没有运行之前,SQL SERVER2000上原始数据表Person表
图2 SQL SERVER中数据库中的Person表的原始数据
(2) 图3为Pocket PC 2003 SE 仿真程序的程序运行界面,分别从上而下顺序点击三个按钮,程序运行结果如图3所示,同步后的SQL SERVER2000中的数据库ABC的person表记录如图4所示:
图3 程序在运行后的仿真器的界面显示
图4 经SLQCE同步后,SQL SERVER中数据库中的Person表中的数据
5.结论
从上述可知,使用RDA进行SQLCE与SQL SERVER进行数据库同步非常简便,而且有Microsoft Visual Studio 2005这个功能强大的开发环境,在PC上开发windows CE移动设备应用程序是非常容易的事,配合SQLCE3.0的使用,大大减少了开发数据库应用程序的工作量。
参考文献:
[1] 吕贵洲,夏明飞,李鸣. 基于Windows CE&Pocket PC的数据库应用程序开发[J]微计算机信息 ,2003,(02) .
[2] 陈福,周树杰,林小竹,史广军. 基于wince的嵌入式系统数据库访问技术研究[J]计算机系统应用 ,2004,(04) .
[3] 张华; 黄立平. SQL Server CE在手持设备上的开发应用[J]. 计算机系统应用,2003(12).