摘要:本文通过一个简单实例,介绍了在.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).

用RDA方式同步SQLCE与SQL SERVER数据库相关推荐

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

    SQLServerCE(SQLCE)是一款运行在WindowsCE设备环境下的轻量级本地数据库引擎,为移动设备上偶尔连接的数据访问提供了解决方案.例如,工商管理人员在执行巡查任务前,可以用WinCE移 ...

  2. 比较和同步两个SQL Server数据库之间的图像

    介绍 (Introduction) Sometimes we lose data by mistake and we want to compare the data with older backu ...

  3. SQL Server数据库导入导出数据方式比较

    在我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验.净化和转换时,将会面临很大的挑战.幸好SQL Server为我们提供了强大.丰富的数据 ...

  4. SQL Server数据库同步方式总结 VS Beedup

    数据库实时同步时下技术热点亦难点,多数企业选择使用数据库SQL Server自带辅助功能,如下总结:      同步方式 功能参数 SQL Server数据库同步方式 国产商业产品 数据库镜像 日志传 ...

  5. 《SQL Server企业级平台管理实践》读书笔记——关于SQL Server数据库的备份方式...

    数据备份一直被认为数据库的生命,也就是一个DBA所要掌握的主要技能之一,本篇就是介绍SQL Server备份原则,SQL Server数据库分为数据文件和日志文件.为了使得数据库能够恢复一致点,备份不 ...

  6. SQL Server数据库同步问题分享[未完,待续](一)

    SQL Server数据库同步问题分享[未完,待续](一) SQL Server数据库同步问题分享(二)---操作步骤[未完,待续] SQL Server数据库同步问题分享(三)---创建订阅 合并发 ...

  7. C# 连接SQL Server数据库的几种方式--server+data source等方式

    本文转载自忙碌的布谷鸟  如何使用Connection对象连接数据库? 对于不同的.NET数据提供者,ADO.NET采用不同的Connection对象连接数据库.这些Connection对象为我们屏蔽 ...

  8. SQL SERVER 2000 数据库备份和SQL Server数据库备份有两种方式,

    SQL SERVER 2000 数据库备份与还原时间:2006-08-30 10:23:23  来源:CSDN  作者:佚名备份数据库,例如: BACKUP DATABASE Northwind    ...

  9. C#同步SQL Server数据库中的数据--数据库同步工具[同步已有的有变化的数据]

    C#同步SQL Server数据库中的数据--数据库同步工具[同步已有的有变化的数据] 1. C#同步SQL Server数据库Schema 2. C#同步SQL Server数据库中的数据--数据库 ...

  10. SQL Server数据库镜像部署 错误1418’处理及证书验证

    SQL Server数据库镜像部署 '数据库镜像'是SQLServer数据库功能最强的一种热备份方法,也是环境要求最高的一种.其配置环节比较麻烦,本人新手研究了三天,中途遇到了许多问题,希望其他第一次 ...

最新文章

  1. 使用Application.GetResourceStream从XAP安装包加载任意资源
  2. 2015 年你在科研上有哪些值得分享的进展和感悟?
  3. (Spinner) android中Spinner的使用
  4. MicroRNA Ranking(Tehran2016)
  5. windows下载、安装运行redis
  6. linux将字符串转小写_小猿圈总结Linux常见命令(一)
  7. php将get传参解析成数组,php解析url (parse_url) 参数成数组 (parse_str)
  8. iOS5 UIKit新特性
  9. python微信开发入门_python tornado微信开发入门代码
  10. python复制csv数据_如何使用Python将CSV数据复制到现有xlsx文件
  11. PostgreSQL 删除表格
  12. 【视频音频】雷霄骅开源视音频项目汇总
  13. 如何用vrml技术实现虚拟计算机组装实验,虚拟现实技术在计算机组装教学中的应用研究...
  14. eNSP配置VLAN间路由
  15. android格式化通讯录
  16. linux系统 ubuntu 使用GWE图形用户界面调整显卡风扇转速曲线
  17. 二分法+牛顿迭代法+简化牛顿迭代法+牛顿下山法解方程的近似值
  18. 【IELTS】机考全流程
  19. 无法访问此网站 - DNS_PROBE_FINISHED_NXDOMAIN
  20. OSChina 周日乱弹 —— 给我两个公主我也抱的起来

热门文章

  1. Vscode C环境配置(转)
  2. (转)周明:未来5-10年,自然语言处理将走向成熟
  3. 程序员 | 我在大厂烧垃圾
  4. 机器学习笔记(二):矩阵、环境搭建、NumPy | 凌云时刻
  5. 2018 LC3见闻
  6. php 从1累加到50,javascript - 一个数每隔一秒执行加1并打印出来,一直加到50停止,用js如何实现?...
  7. 【目标定位】基于matlab扩展卡尔曼滤波目标定位仿真【含Matlab源码 128期】
  8. 【图像分割】基于matalb灰狼算法最小交叉熵多阈值图像分割【含Matlab源码 903期】
  9. dubbo注入找不到bean_Dubbo配置参考手册之dubbo:reference
  10. 脸部识别算法_面部识别技术是种族主义者吗? 先进算法的解释