用RDA方式同步SQLCE与SQLSERVER数据库

时间:2022-05-25 11:36:21

用RDA方式同步SQLCE与SQLSERVER数据库

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

上一篇:全国创新作文大赛获奖作品:高中男生眼中的高... 下一篇:应加强对国有企业产权审计