引言 数据同步已经成为移动计算的一种基础应用模式。但由于在移动环境中设备多样,需要交互的数据也千差万别,再加之连接特性很不稳定,这就要求用标准的方法来实现数据同步,使之能成为移动计算环境中的一个基础设施。我们在Pocket PC 2002中加载了SQL Server CE作为Pocket PC的数据库,在Windows Server 2003中加载了SQL Server 2000作为普通台式计算机的数据库,同时采用了Microsoft Visual Studio .NET 2003作为研究的开发平台,Pocket PC与普通PC计算机之间的数据同步采用xml方式进行。
1、搭建平台硬环境及软环境
1.1、下载和安装SQL Server CE
在微软的相关网站上下载SQL Server CE 2.0或以上的版本,将Pocket PC与桌面计算机正确建立合作关系,进行数据通讯,按要求在桌面计算机上正确安装SQL Server CE,安装时,通过建立的合作关系,安装程序会将SQL Server CE同时安装到Pocket PC 上。
1.2、配置基于IIS的Web服务器
要想通过Pocket PC直接访问服务器中的SQL Server 2000数据库中的数据,在服务器上必须安装IIS,建立web服务器。正确安装IIS后,还要进行下面的配置:打开“控制面板->Internet信息服务”,设置步骤如下:
(1)增加虚拟目录
(2)虚拟目录名称为:power(电力)
(3)填写虚拟目录路径:将存放SQL Server CE的系统目录下Server于目录作为虚拟目录路径,如:D:\Microsoft SQL Server CE 2.O\Server。该目录下包含sscesa20.dll等文件。
(4)设置访问权限:该目录应该设置为读取和写入,执行许可应设置为:脚本和可执行程序。
(5)测试SQL Server CE IE安装是否正确:打开IE浏览器,在地址栏中输入http:\\59.73.195.91/sqlce/sscesa20.dll,其中,59.73.195.91是Web服务器ip地址,系统返回:SQL Server CE Server Agent,则表明设置正确。
1.3、在服务器配置SQL Server CE
SQL Server CE安装后,打开“程序Microsoft SQL Server CE 2.0->Configure Connectivity Support in IIS”,执行Conf- igure Connectivity Support in IIS菜单项,对相关项目进行配置,这样的配置是必须的。
2、远程数据访问RDA(Remote Data access)
RDA对象,是SQL Server CE自带的,它为Windows CE应用程序访问远程的SQL Server 2000 数据库提供了一种简单的访问方式。利用它可以将存在Pocket PC上的数据直接写入到远程的SQL Server 2000数据库中或将远程的SQL Server 2000数据库的数据下载到Pocket PC中的SQL Server CE数据库中的一个数据表中,这样就实现了数据的交换与同步。安装完SQL Server CE后,我们就可以在开发平台如:Embedded Visual C++或Microsoft Visual Studio.NET 2003中使用RDA对象来访问SQL Server 2000数据库中数据。我们使用的是Microsoft Visual Studio.NET 2003开发平台。
RDA对象有许多方法和属性,主要的方法和属性如下:
RDA 对象的主要方法(method):
方 法
功 能 说 明
Pull
方法
从Microsoft SQL Server数据库中获取数据.存放在SQL Server CE数据库中的一个表中。注重,该表应是一个不存在的数据表.执行Pull方法后,会自动建立数据表。
Push
方法
将SQL Server CE数据库表中已改变的数据上传到Server CE数据库的对应表中。
RDA对象的主要属性(PRoperty):
方 法
说 明
Internet
URI 属性
PC 服务器上sscesa20.dlI的访问地址.如:
http:\\59.73.195.91/sqlce/sscesa20.dll
LocalConnection String属性
String属性Pocket PC的数据库访问连接串
3、程序设计
采用Microsoft Visual Studio.NET 2003作为开发工具,开发语言是C#,服务器采用Windows Server 2003.数据库采用SQL Server 2000,SQL Server CE 。
3.1、在Pocket PC上创建SQL Server CE数据库
SQL Server CE 中的数据库是存储结构化数据的表集合。在可以存储数据库之前,必须创建数据库。在创建数据库之后,可以创建保存数据的表。首先在Pocket PC上创建一个名为PowerDB.sdf的SQL Server CE数据库。
3.2、创建WalkThrough类
public class WalkThrough
{
static void Main()
{
SqlCeConnection conn = null;
if (File.Exists ("PowerDB.sdf"))//判定
File.Delete ("PowerDB.sdf");
SqlCeEngine engine = new SqlCeEngine ("Data Source = PowerDB.sdf");//创建空数据库
engine.CreateDatabase ();
conn = new SqlCeConnection ("Data Source = PowerDB.sdf");//连接到新数据库
conn.Open();}}
运行上述代码将会在Pocket PC上建立一个名为PowerDB.sdf的数据库,用于访问该数据的数据源为PowerDB。
3.3、数据库同步代码
为了使Pocket PC上数据库数据与PC服务器上的数据库数据保持同步,我们采用远程数据访问(RDA)对象来实现.下面简单介绍设计及实现方法。
(1)初始设置
下面代码对Pocket PC的数据库连接和要保持同步的远程服务器SQL Server 2000数据库连接进行初始设置:
private void RDAFm_Load(object sender, System.EventArgs e) //加载同步窗体即初始化
{
synDS=new DataSet();//声明数据集
synDS.Locale=CultureInfo.CurrentCulture;
CurrentFolder=System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;//获取程序集URL位置
CurrentFolder=CurrentFolder.Substring(0,CurrentFolder.LastIndexOf("\\")+1);
xmlFileName=CurrentFolder+"SynConfig.xml";//获取文件名
xsdFileName=CurrentFolder+"SynConfig.xsd";//获取文件名
FileStream FsXML = new FileStream(xmlFileName,FileMode.Open);
FileStream FsXSD = new FileStream(xsdFileName,FileMode.Open);
XmlTextReader xtrXSD = new
XmlTextReader(FsXSD);
synDS.ReadXmlSchema(xtrXSD);
xtrXSD.Close();
FsXSD.Close();
XmlTextReader xtrXML = new XmlTextReader(FsXML);
synDS.ReadXml(xtrXML);
xtrXML.Close();
FsXML.Close();
DataTable dt=synDS.Tables["SynCon"];//定义数据集中的表
//为控件获取数据绑定
Text.DataBindings.Add(newBinding("Text
",dt,"name")); }
(2)数据同步[2]方法:数据下载(同步到本机)与上传(同步到服务器)
笔者利用RDA的Push和Pull方法.分别实现了将掌上电脑上的SQL Server CE数据库的数据上传到PC服务器上的SQL Server 2000数据库中.及将PC上SQL Server 2000数据库中数据下载到掌上电脑的SQL Server CE数据库中。将SQL Sever 2000数据库中PowerDB的表中数据下载到SQL Server CE数据库中同名的表中:
下面我们介绍一下这两种方法:
rdaPush();//数据上传方法
private void rdaPush ()
{
SqlCeRemoteDataAccess rda = null;
rda = new SqlCeRemoteDataAccess();
rda.InternetLogin = login; rda.InternetPassWord = pwd;
rda.InternetUrl = URL;
rda.LocalConnectionString = @localConnectionString;
rda.Push("ctlRoom",rdaOleDbConnectString,RdaBatchOption.BatchingOn);
rda.Push("ctlRoomRecord",rdaOleDbConnectString,RdaBatchOption.BatchingOn);
rda.Push("scoutRecord",rdaOleDbConnectString,RdaBatchOption.BatchingOn);
MessageBox.Show("数据上传成功");
rda.Dispose();}
rdaPull();//数据下载方法
private void rdaPull()
{
if (File.Exists (dbName+".sdf"))
File.Delete (dbName+".sdf");
SqlCeEngine engine = new SqlCeEngine (localDbString);
engine.CreateDatabase (); SqlCeRemoteDataAccess rda = null;
rda = new SqlCeRemoteDataAccess();
rda.InternetLogin = login;
rda.InternetPassword = pwd;
rda.InternetUrl = URL;
rda.LocalConnectionString = @localConnectionString;
rda.Pull( "tableName",
"Select * from tableName ", rdaOleDbConnectString,
RdaTrackOption.TrackingOffWithIndexes ,
"ErrorTable");
string day=string.Empty; //条件同步
GetDate(ref day);//获取当前日期格式
//基本信息,需要上传服务器
rda.Pull(" tableName ",
"Select * from tableName", rdaOleDbConnectString,
RdaTrackOption.TrackingOnWithIndexes);MessageBox.Show("数据下载成功!");
rda.Dispose();}
(3)用标准的SQL语句修改远程PC服务器数据库中的数据
除了用Pull,Push方法下载和上传数据外,RDA 的Submit SQL方法还支持用标准的语句,如:Insert into、Update、delete等语句对远程的PC服务器端SQL Sever 2000数据库数据进行增加、更新等操作,甚至还可以使用存贮过程对数据库进行操作,在这里笔者不做以具体介绍了。
4、巡检系统软件实现
嵌入式系统与一般PC在开发硬件环境上的最大差异在于它分为两个平台:开发平台和目标平台,程序在主机端开发、编译,在目标平台的另一个CUP平台上执行,这就造成了嵌入式系统的交叉编译、下载程序到目标平台内存、远程调试的非凡现象。远程调试实际包含两部分软件,前端运行在主机并提供人机界面;后端运行在目标机上,它负责通过某种链路来和前端通信。后端被称作调试监控器(debug monitor),它提供了对目标处理器的底层控制。
4.1、系统的选择与组成
应用系统主要由两部分组成见图1。?客户端:目标机采用嵌入式Windows CE操作系统为平台,相应的开发语言为C#;?实现功能:在本文中执行C/S中的服务器进程。?服务器端:主机采用Windows Server 2003,开发工具为面向对象的Microsoft Visual Studio -.NET 2003,数据库治理系统采用SQL Server 2000; ?实现功能:在本文中执行C/S中的客户进程。提出与目标机的连接请求,在连接成功后与客户端进行数据上传与下载。
图1:客户/服务器模式的系统组成4.2、TCP/IP协议
随着因特网的迅速发展,使TCP/IP体系结构成为事实上的工业标准。TCP/IP协议把网络协议看成5层的层次模型,如图2所示。
图2:网络协议层次模型
上图中每个层都实现自己的功能,且每层的功能都是其上一层提供的服务基础。网络层协议IP协议,它提供在通信子网中进行路由选择的算法。IP协议使用IP地址来确定发送端(源主机)和接收端(目的主机),提供端到端的数据同步。
传输层中有TCP协议,该层协议提供主机之间的进程与进程的有效数据传输,数据的发送端和接收端都要建立起端点,形成连接关系,这两个端点即为“套接字”。
4.3、系统软件实现
本系统是面向客户机/服务器模式设计的,其系统必须包括客户和服务器的两个进程,而且服务器进程要先于客户进程启动,在提供服务时必定存在服务器进程和客户进程两个运行着的进程。图3所示为目标机上的服务器进程和主机上的客户进程的执行顺序和流程图。
5、总结
借助网络通信实现电力巡检中巡检信息的共享和同步,可极大提高巡检治理的自动化程度和生产效率。在远程服务器上建立中心巡检数据库,在现场巡检仪中仅设置小容量数据库;由中心数据库对整个系统中的电力设备进行统一的治理调度,而局部数据库与中心数据库间的数据传输与同步可以提高电力设备的使用效率和系统的快速应变能力。设计并实现的这一套开发工具包定义了完整的应用模型,经过实际使用也取得了很好的效果,对于进一步推广相关应用的普及也有很高价值,如铁路售票,医疗查房等巡视检查工作都具有一定的指导意义及前瞻性。
图3:C/S系统执行的流程图