那些铃声适合手机铃声:WinCE数据通讯之SqlCE数据同步

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 13:58:42
上一篇总结了WinCE通过WebService进行数据通讯的交互方式,今天整理个SqlCE数据同步方式的内容。先说下软件环境:终端平台使用WinCE5.0+SqlCE2.0,服务器使用Windows server 2003+Sql Server2000 sp4,Dot NetFramwork 使用的是2.0版本。

SQL Server CE与SQL Server之间通过RDA合并复制进行数据同步。Remote dataaccess(RDA)主要由三部分组成:SQL Server CE Database Engine、SQL Server CE ClientAgent和SQL Server CE DataBase Agent。SQL Server CE数据库引擎负责写入和读取SQL ServerCE数据库中的数据;SQL ServerCE客户端代理是RDA在移动设备上的主要组件,它实现了RDA的主要功能,我们可以通过程序调用它提供的接口以控制RDA;SQL ServerCE服务器端代理位于服务器端,它与SQL Server CE客户端代理通过HTTP协议进行通信,接收并处理SQL ServerCE客户端代理的命令。其通讯原理结构如下图:


数据同步的环境配置工作也分为:终端SqlCE配置、IIS代理配置。

终端SqlCE配置:安装终端与PC的同步程序MicrosoftActiveSync,找到VS2005安装目录D:ProgramFilesMicrosoft Visual Studio 8SmartDevicesSDKSQLServerMobilev2.0wce400armv4下的sqlce20.dev.ppc.wce4.armv4.CAB和sqlce20.ppc.wce4.armv4.CAB,拷贝至终端WinCE系统中,在终端安装这两个包,安装后在终端的Windows目录下将增加了三个文件:Ssce20.dll、Ssceca20.dll和Sscemw20.dll。在Windows目录下增加了一个目录SqlCE2.0,其中的isqlw20.exe即是在WinCE下运行的类似SqlServer2000的查询分析器程序,也可以在烧制WinCE操作系统时把SqlCE烧制进系统中。

IIS代理配置:IIS代理服务器若要进行GPRS通讯,最好能有静态IP。代理服务器上先安装好IIS和SqlServer2000,在IIS代理服务器上安装Sql Server CE2.0,安装过程中会出现配置选项


这里输入虚拟目录的别名和SqlCE的安装目录,我输入的虚拟目录名是SqlCE20,因为我还配置了一个SqlCE3.0的版本 :-) 继续

选择匿名就可以了,安全要求高的可以设置密码访问,做个匿名的先。完成安装后,在IE上输入http://localhost/sqlCE20/sscesa20.dll ,若显示“SQL Server CE Server Agent”则说明安装配置IIS成功。这里安装要注意的问题是sqlServer2000的补丁要和sqlCE2.0的补丁版本一致。

开始编写代码,新建项目智能设备WindowsCE5.0应用程序,添加sqlCE2.0引用,注意VS2005默认的sqlce引用是3.0版本的,所以这里要添加浏览引用,位置是D:Program FilesMicrosoft Visual Studio 8SmartDevicesSDKSQLServerMobilev2.0System.Data.SqlServerCe.dll。添加代码引用:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Data.SqlServerCe;
using System.Reflection;

设置数据连接及相关连接属性

private string AppPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase.ToString());//程序运行目录
private SqlCeCommand cmd = new SqlCeCommand();
private SqlCeConnection con = new SqlCeConnection();
private string dataBaseName = "test.sdf";
private string dbFile = string.Empty;
private string internetURL = "http://192.168.1.187/sqlce20/sscesa20.dll; //IIS代理服务器
privatestring remoteConStr = "Provider=sqloledb;Data Source=(local);InitialCatalog=test;User Id=sa; Password=sa;";//IIS代理服务器上能访问到的数据库配置
private SqlCeEngine se = new SqlCeEngine();
private SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess();

窗体加载项

private void Form1_Load(object sender, EventArgs e)
{
this.dbFile = this.AppPath + @"" + this.dataBaseName;//数据库
string str = "DataSource=" + this.dbFile;
this.con.ConnectionString = str;//终端数据库配置
this.rda.InternetLogin = "";//访问IIS代理服务器的用户
this.rda.InternetPassword = "";//访问IIS代理服务器的密码
this.rda.InternetUrl = this.internetURL;//服务器数据库配置
this.rda.LocalConnectionString = str;//终端数据库配置
}

下载

private void btnPull_Click(object sender, EventArgs e)
{
try
{
this.ExecuteSql("drop table gdinfos");//先要删除本地数据表如果存在的话,否则会报错
int tickCount = Environment.TickCount;
this.rda.Pull("gdinfos", "select * from gdinfos", this.remoteConStr, RdaTrackOption.TrackingOnWithIndexes);
int num2 = Environment.TickCount - tickCount;
MessageBox.Show(string.Format("下载成功n用时{0}毫秒", num2));
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}

上传

private void btnPush_Click(object sender, EventArgs e)
{
try
{
int tickCount = Environment.TickCount;
this.rda.Push("gdinfos", this.remoteConStr);
int num2 = Environment.TickCount - tickCount;
MessageBox.Show(string.Format("上传成功n用时{0}毫秒", num2));
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);

}}

、、、、、、、、、、、、、、、、、、、、、、

1. RDA简介
2. 需求及配置
3. RDA 对象方法
4. RDA 代码示例
======================
1. RDA简介
------------
Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile) 中的
远程数据访问 (RDA) 允许应用程序从远程 SQL Server 数据库表中访问数据,
并将数据存储到本地 SQL Server Mobile 数据库表中。
随后,应用程序可以读取和更新本地 SQL Server Mobile 数据库表。
SQL Server Mobile 可以选择跟踪对本地表所做的所有更改。
稍后,应用程序可以将本地表中更改的记录更新回 SQL Server 表中。

在 SQL Server Mobile 中,
从 SQL Server 表向本地 SQL Server Mobile 表传播数据称为请求数据。
将本地 SQL Server Mobile 表中所做的更改传播回 SQL Server 表称为推送数据。

应用程序还可以使用 RDA 来提交 SQL 语句,
在远程 SQL Server 数据库上执行。
例如,应用程序可以提交 SQL 语句,向 SQL Server 表中插入、更新或删除记录。
应用程序可以调用任何不返回记录集的 SQL 语句,包括远程系统上的存储过程。

当无需 SQL Server Mobile 合并复制的完整功能(例如解决冲突)时,RDA 较为适用。

2. 需求及配置
--------------

a. IIS
   在通过 HTTP 使用复制或远程数据访问 (RDA)
   访问 Microsoft SQL Server 中的数据库之前,
   必须先设置虚拟目录,并配置合适的 NTFS 权限。
   SQL Server 2005 Mobile Edition (SQL Server Mobile)
   提供了一个名为“配置 Web 同步向导”的向导
   来创建和管理虚拟目录及 NTFS 权限。

b. SQL Server
   若要使用远程数据访问 (RDA),
   必须基于 Microsoft Internet 信息服务 (IIS) 和 SQL Server 身份验证的配置方式,
   授予对 Microsoft SQL Server 数据库的访问权限。
   通过编程方式实施 RDA 可以完成此步骤。

IIS 身份验证模式           SQL Server 身份验证模式    必须授予数据库访问权限的用户 
匿名访问                   集成 Windows 身份验证      computername\IUSR_computername
                                                         或所配置的 IIS 匿名用户帐户
 
基本身份验证               集成 Windows 身份验证      IIS 客户端的用户或组。
 
集成 Windows 身份验证      集成 Windows 身份验证      IIS 客户端的用户或组。
                                                          只有当 SQL Server 和 IIS 运行于
                                                          同一台计算机上时才支持此配置。
 
匿名访问、                 SQL Server 身份验证        在 RDA 对象中的 Pull、Push
基本身份验证                                             或 SubmitSQL 方法
或集成 Windows 身份验证                                  的 SQL Server OLEDBConnectionString 参数中
                                                         指定的用户。
 
3. RDA 对象方法
---------------
Pull 方法 (RDA)
     从远程 Microsoft SQL Server 数据库检索数据,
     并将该数据存储在位于本地 SQL Server Mobile 数据库内的单个表中。
 
Push 方法 (RDA)
     从本地跟踪的 SQL Server Mobile 表向原始的远程 SQL Server 表发回更改。
 
SubmitSQL 方法 (RDA)
     提交 SQL 语句,以在远程 SQL Server 数据库上执行。

这三个 RDA 对象方法都包含 OLEDBConnectionString 属性。
该属性提供了连接到远程 SQL Server 数据库时使用的 OLEDB 连接字符串。
OLEDB 连接字符串提供连接信息,其中包括安全信息。

若要使用 Push 方法,应用程序必须已经通过调用 RDA_TRACKOPTION 参数
设置为 TRACKINGON 或 TRACKINGONWITHINDEXES 的 Pull 方法,
创建了本地 SQL Server Mobile 表。

4. RDA 代码示例
---------------
测试中 后续成功时补上