RDA实现SQL CE与SQL Server间数据存取

 

RDA实现SQL CESQL Server间数据存取

PPC程序与桌面PC进行通信的编程方式目前有两种,1、利用Socket编程与桌面程序进行通信;2、利用RDAReplication(复制)进行数据库编程来完成与桌面SQL Server数据库的存取。利用Socket编程实际上就是通过TCP/IP协议与桌面PC进行通信,它可以很方便的传输一般类型的数据,譬如:字符串、整数以及字节等,但是如果需要传输类型化的数据则需要程序员自己去封装,而且若想由智能设备从桌面数据库引擎中返回指定数据库表的数据,必须编写桌面接口服务程序来查询数据并将结果通过Socket返回给智能设备。那么如何才能在Pocket PC上做到像在桌面PC上一样存取本地数据库甚至是远程桌面PC的数据库呢?通过在智能设备Pocket PC上运行的SQL Server CE 我们便可以轻松存取放置在Pocket PC上的SQL Server CE数据库,还可以通过SQL Server CE中的RDA或者合并复制快速实现从智能设备上存取远程桌面SQL Server2000的数据库

 

什么叫RDA

远程数据访问,即Remote Data Access(简称为RDA),这项技术在Windows CE2.11版本时已经存在,在SQL Server 2000 For CE 出现后,它的功能便更加丰富了,通过使用这项技术。并利用各种网络环境,用户可以将Pocket PC 连接到远程SQL Server 2000 数据库。如果拥护是第一次进行连接,则移动设备会从SQL Server 2000 上下载需要查询的数据;如果不是第一次查询,移动设备则会对比本地数据库和远程数据库中的内容。并更新远程数据库中的信息。

RDA技术的数据传递。

通过RDA 技术,可以完成以下几种类型的数据传递:

 从服务器端下载数据。当移动设备上的本地数据库无内容时,可以通过RDA技术从远程SQL Server 2000服务器下载初始化数据到本地SQL Server CE数据库。例如,应用程序利用RDA技术下载终端拥护登陆数据和产品原始数据到本地移动数据库中,从而完成系统的初始化。如果没有这个最初的初始化步骤,系统将无法登陆。

 向服务器上传数据。移动设备上的应用程序在初始化后能够让操作员登陆并使用系统。操作员录入和采集信息(如GPS的信息和条形码的信息)都将被保存在移动数据库中,此时,有可以利用RDA技术将本地数据上传到SQL Server 2000服务器端。值得注意的是,我们在设计服务器端数据库时,在参加同步的表中不能存在自增量字段,否则容易造成上传数据失败,起原因是不同的移动设备回对表中的同一个字段做自增。

 更新服务器端数据。有的时候,在多个移动设备上的数据库和服务器端的数据库中都可能存在同一条记录,这时服务器的记录将以最后一次同步移动设备中的记录为准。

 下达无返回的T—SQL命令操作远程服务器(Submit SQL)。在移动设备上的应用程序能够利用T-SQL命令远程操作SQL Server 2000数据库。这项功能非常实用,我们通常需要在采集数据时记录当前时间,但是如果存在多个移动设备时,各个移动设备的机器时间又可能是不统一,对这种情况的解决方案就是在每次数据同步时,利用Submit SQL技术刷新服务器时间,下载这个时间并同时设定为移动设备的时间。

 SQL Server CE 架构图 如图 所示。

 

 Pull(拉数据)

 拉数据就是Windows CE SQL Server 服务器获取数据的过程,这里也可以理解从服务器中下载数据。用户不必关心这之间的处理过程,只需要调用ISSCERDA接口的pull方法即可。Pull方法的定义如下:

 Virtual /* [id] */ HRESULT STSMETHODCALLTYPY Pull(

     /* [in] */ BSTR LocalTableName,

/* [in] */ BSTR SQLSelectString,

/* [in] */BSTR OLEDBConnectionString,

/* [defaultvalue][in] */ RDA_TRACKOPTION TrackOption

/* [defaultvalue][in] */BSTR ErrorTableName)=0;

 

 

参数

说明

LocalTableName

将从服务器获取数据存储到此表中。如果此表已经存在,将会发生错误。

SQLSelectString

表示从服务器获取数据的SQL表达式,它将控制从服务器取得什么数据。同时也支持那些返回结果集的存储过程和视图。如果是将服务器中的多个表的数据传递到CE中的一个表,那么应将TRACKOPTION的参数值设置成为TRACKINGOFF,表示获取后的数据不能再上传到服务器。

OLEDBConnectionString

连接到SQL Server服务器的连接字符串

RDA_TRACKOPTION

表示SQL Serve CE是否跟踪存储获取服务器数据的表(LocalTableName)的变化。它取值是一个枚举值,具有如表 所示的四个取值。

ErrorTableName

表示CE本地错误表名。在以后调用Push方法向服务器提交变化数据时。如果发生错误,此错误表将被创建,并被写入错误信息。如果调用Pull方法时,此错误表已经存在,将会发生错误。

 

    参数TrackOption的取值

常量

说明

TRACKINGON

1

对于接收到数据的表,SQL Serve CE将跟踪所有的变化,主键约束将根据SQLSelectString被执行而被创建。此值是默认值。

TRACKINGOFF

0

对于接收到数据的表,SQL Serve CE将不跟踪所有的变化,主键约束在本地表中也是不会被创建

TRACKINGON_INDEXES

2

对于接收到数据的表,SQL Serve CE将跟踪所有的变化,索引和主键如果已经在SQL Server表中存在,并且字段被指定在SQLSelectString查询语句里,那么服务器表中的索引和主键将创建到CE本地表中。

TRACKINGOFF_INDEXES

3

对于接收到数据的表,SQL Serve CE将不跟踪所有的变化,索引和主键如果已经在SQL Server表中存在,并且字段被指定在SQLSelectString查询语句里,那么服务器表中的索引和主键将创建到CE本地表中。

 

Push(推数据)

 

推数据和拉数据是完全相反的两个方法。推数据则是将CE本地库中的数据上传到服务器中。Push方法的定义如下:

Virtual /* [id] */ HRESULT STSMETHODCALLTYPY Push(

      /* [in] */ BSTR LocalTableName,

/* [in] */BSTR OLEDBConnectionString,

/* [defaultvalue][in] */ RDA_BATCHOPTION BatchOption=0

 

 

参数

说明

LocalTableName

表示将向服务器上传的变化数据的表名

OLEDBConnectionString

为连接到SQL Server服务器的连接字符串

RDA_BATCHOPTION

表示上传数据的方法。它取值是一个枚举值,具有如表 所示的两个取值。

 

    参数BatchOption的取值

常量

说明

BATCHINGOFF

 

上传的数据被一条一条更新到服务器

BATCHINGON

 

上传的数据被一次性的更新到服务器

 

Submit(远程T-SQL操作)

Submit方法可以执行远程SQL语句,也就是可以将SQL语句传递到服务器上直接执行,其定义如下:

Virtual /* [id] */ HRESULT STSMETHODCALLTYPY Submit(

      /* [in] */ BSTR SQLString,

/* [in] */BSTR OLEDBConnectionString,=0

 

 

属性

说明

SQLString

表示要执行的SQL语句

OLEDBConnectionString

为连接到SQL Server服务器的连接字符串

  


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1622083

posted @ 2007-06-05 17:14  寒天飞雪  阅读(1350)  评论(1编辑  收藏  举报