1 引言
嵌入式移动数据库系统或简称为移动数据库(EMDBS),是专门运行在各种智能型嵌入设备或移动设备上的小型数据库系统。目前已经成为一个十分活跃的研究和应用领域。
Microsoft SQL Server 2000 Windows CE Edition 2.0版简称SQL Server CE 2.0,`是用作快速开发的关系型精简数据库[1],它将企业数据管理能力扩展到了基于Windows CE操作系统的嵌入式移动设备上。SQL Server CE提供远程数据访问和合并复制功能,确保了移动设备SQL Server CE数据库中的数据能够可靠地传输、能够离线操作并在晚些时候与SQL Server服务器同步,这些使得SQL Server CE成为移动和无线环境下理想的数据库。
本文介绍如何采用基于.NET Compact Framework的ADO.NET技术开发嵌入式移动设备的数据库应用,并将SQL Server CE 数据库应用于仓库物料移动巡查系统的设计方案。
2 .NET 下开发SQL Server CE的方法
在基于Windows CE的嵌入式移动设备上开发SQL Server CE数据库应用可以使用的工具有EVB,EVC和 Visual Studio .NET(vs2003.net或vs2005.net)。使用EVB或EVC时,通过ADOCE或OLE DB for SQL Server CE访问SQL Server CE数据库,编程比较繁琐。关于在EVC,EVB下操作数据库的方法这里不再赘述,具体可参见文献[2] 。推荐采用Visual Studio.NET,通过ADO.NET技术访问操作SQL Server CE数据库。
Visual Studio.NET开发嵌入式移动设备时采用Smart Device Programmability(SDP,智能设备编程)特性。使用新的C#语言或Visual Basic .NET语言为移动或嵌入式设备开发应用程序。在.NET Compact Framework下通过ADO.NET可方便快捷的访问SQL Server CE数据库。下面以Visual Basic.net 2003为例简述如何通过ADO.NET实现对SQL Server CE数据库的基本操作。
首先,必须在项目中添加对System.Data.SqlServerCe组件的引用,System.Data.SqlServerCe 命名空间为 SQL Server CE.NET Framework 精简版数据提供程序。SQL Server CE.NET Framework精简版数据提供程序描述了一个类集合,这些类可用于在托管环境下从基于 Windows CE的设备访问 SQL Server CE 中的数据库。通过使用System.Data.SqlServerCe,可以在任意设备上创建 SQL Server CE 数据库,还可以建立指向设备上或远程服务器上的 SQL Server 数据库的连接。
应用开发中,根据不同的需求,从System.Data.SqlServerCe 命名空间中选择相应的类进行操作。例如:SqlCeEngine类包含了SQL Server CE 引擎的属性、方法及其他对象,可用来创建一个新的 SQL Server CE 数据库。代码示例如下:
Dim connStr As String = " data source=\My Documents\SampleDB.sdf "
Dim SQLEngine As System.Data.SqlServerCe.SqlCeEngine
SQLEngine = New System.Data.SqlServerCe.Engine (connStr)
以上代码完成了在My Documents目录下创建空的名为SampleDB的数据库。这里还介绍关于一个比较常用的类——SqlCeCommand,可用来表示对数据源执行的 SQL 语句。当需要向已创建的数据库SampleDB添加一个名为Bicycle的库存表,并定义它的相关字段时可用以下代码实现,其中cn定义了数据源的连接,使用了SqlCeConnection类:
Dim cn As System.Data.SqlServerCe.SqlCeConnection
cn = New System.Data.SqlServerCe.SqlCeConnection(connStr)
Dim cmd As New System.Data.SqlServerCe.SqlCeCommand(SQLStr, cn)
SQLStr = "CREATE TABLE Bicycle (BicycleID Smallint Primary Key _
NOT NULL,CompanyName nvarchar(40) NOT NULL, Number int NOT NULL)"
cmd.CommandText = SQLStr
cmd.Connection = cn
cn.Open()
cmd.ExecuteNonQuery()
cmd.Connection.Close()
在手持设备上用代码方式或用SQLCE Query创建\编辑表单是比较麻烦的过程,在实际应用中的做法是在初始化时只建立空的数据库,需要的表单采用RDA(远程数据访问)的Pull方法从SQL Server 2000服务器上“拉”到先前创建的数据库中。
3 SQL Server CE 数据库在仓库物料巡查系统中的应用
仓库物料巡查传统上采用的是纸张作业方式,操作流程是仓库巡查人员领取物资清单后在出入口进行检查和填写记录,然后将填好的表格回收到数据中心,数据中心的工作人员再手工将信息录入计算机系统进行处理。缺点是处理周期长,工作人员工作量大,费时费力且容易发生人为错误。移动解决方案中,仓库巡查人员只需下载对应物料清单到手持PDA上,选用的PDA采用Windows CE操作系统。对照此清单检查,现场直接在PDA上记录,然后将结果上传。资料的主要处理过程主要在后端SQL Server 2000服务器端处理,包括进出物料表单的录入,检查结果报表的处理、数据维护等。自动化程度高,减少了手工录入处理环节,PDA具备无线上网功能后可无限扩展系统的覆盖范围。
因为需要下载物料清单到PDA上,并在PDA上临时保存物料清单,所以在PDA上需要有一个数据库系统。选择的移动数据库系统即为SQL Server CE 2.0。同时,系统需要考虑手持PDA上SQL Server CE 2.0与数据中心SQL Server 2000进行双向的数据同步问题。
4 SQL Server CE 2.0与SQL Server 2000数据同步设计
SQL Server CE与SQL Server之间可以通过RDA(远程数据访问)和Replication(合并复制)两种方式进行数据同步。
SQL Server CE 2.0复制功能基于 Microsoft SQL Server 合并复制。只能与SQL Server 2000配合使用。允许分别在便携式设备和服务器上自行更新数据。之后可以对该设备和服务器上的数据进行同步,以将客户端的更改发送到服务器,或从服务器接收新的更改。与 RDA 相比,使用合并复制却有许多优点,如提供了内置和自定义的冲突解决功能,通过复制可以同时对多个表中的数据进行同步等。但合并复制需要在服务器上进行更多的配置和维护。
远程数据访问 (RDA) 使移动应用程序能够访问远程 SQL Server 2000 数据库表中的数据,并将这些数据存储在本地 SQL Server CE 2.0 数据库表中。随后,该应用程序就可以读取和更新本地 SQL Server CE 2.0 数据库表。SQL Server CE 2.0可以选择跟踪对本地表所做的所有更改。之后,应用程序可以将本地表中更改过的记录更新回 SQL Server 表。在远程数据访问过程中,将数据从 SQL Server 表传播至本地 SQL Server CE 表的过程称为Pull --“拉”数据。将本地 SQL Server CE 表中所做的更改传播回 SQL Server 表的过程称为Push --“推”数据。此外还有SubmitSQL方法可直接向SQL Server 2000数据库提交一个无返回行的命令执行。在不需要使用SQL Server CE 2.0合并复制的全部功能(包括冲突解决)时,适合使用 RDA方式。[3]
本文采用的解决方案中,服务器端运行SQL Server 2000并采用配置IIS构建应用服务器,移动端采用PDA并配置SQL Server CE 2.0。移动端通过IIS代理访问服务器端。对表单的同步处理采用RDA方式完成。图1示意了RDA的方式下的数据同步[4]。
RDA功能实现主要由三部分组成:SQL Server CE数据库引擎、SQL Server CE客户端代理和SQL Server CE服务器端代理。用户直接通过SQL Server CE客户端代理即可操作数据库。SQL Server CE客户端代理是RDA在移动设备上的主要组件,它实现了RDA的主要功能,可以通过程序调用它提供的接口以控制RDA;SQL Server CE服务器端代理位于服务器端,它与SQL Server CE客户端代理通过HTTP协议进行通信,接收并处理SQL Server CE客户端代理的命令。
以下代码示例如何通过RDA的Pull方法在移动设备上建立“Localtable”表,并下载SQL Server 2000中相应表的数据。使用RDA时需要创建SqlCeRemoteDataAccess对象。
Private _strRemoteConnect As String
_strRemoteConnect = "provider=sqloledb;data source= MySqlServer; "
_strRemoteConnect &="Initial Catalog=Test; User Id=sa;Password=sa;"
Private _strLocalConnect As String
_strLocalConnect ="Provider=Microsoft.SQLSERVER.OLEDB.CE.2.0; "
_strLocalConnect&=" Data Source=\My Documents\SampleDB.sdf; "
Const _strInternetURL As String = "http:// 10.1.11.25/ssce20/sscesa20.dll"
'下载表单过程DownloadTables(ByVal Localtable As String)
Public Sub DownloadTables(ByVal Localtable As String)
Try
Dim rda As SqlCeRemoteDataAccess= New SqlCeRemoteDataAccess()
Dim _strSelectTablerToD As String
_strSelectTablerToD ="SELECT * FROM "+ Localtable
rda.InternetLogin = "user name"
rda.InternetPassword = "password"
rda.InternetUrl = _strInternetURL
rda.LocalConnectionString = _strLocalConnect
rda.Pull(Localtable, _strSelectTablerToD, _strRemoteConnect, _
System.Data.SqlServerCe.RdaTrackOption.TrackingOnWithIndexes)
'只有设置了数据跟踪选项TrackingOnWithIndexes以后才可以将SQL Server CE
'中的数据“推”回到SQL Server 2000中。
Catch ex As SqlCeException
……
End Try
End Sub
这里指定两个重要的参数:①SQL Server CE服务器端代理的访问地址, SqlCeRemoteDataAccess.InternetUrl;②连接SQL Server CE数据库的连接字符串:SqlCeRemoteDataAccess.LocalConnectionString;使用了连接SQL Server2000数据库的连接字符串_strRemoteConnect和选择相应表的SQL语句_strSelectTablerToD。
检查完毕后,表单上传采用RDA的Push方法, 用法于PULL基本相同,使用SqlCeRemoteDataAccess类的Push方法,示例如下:
rda.Push("Localtable ", _strRemoteConnect, _
System.Data.SqlServerCe.RdaBatchOption.BatchingOn)
在设计SQL Server CE与SQL Server之间数据同步方案时应结合自己的数据同步业务逻辑灵活选择运用RDA或合并复制,也可自行设计数据传输和辨认规则。本文所述方案只要求对物料清单的同步处理,逻辑规则简单,所以采用RDA方式即可便捷实现。
5结论
本文介绍了微软.NET Compact Framework架构下,采用ADO.NET开发移动设备SQL Server CE数据库应用的新方法。结合仓库物料移动巡查系统的设计方案研究了嵌入式移动数据库SQL Server CE 2.0和SQL2000的数据同步问题。SQL Server CE是目前市场上较为成熟的嵌入式移动数据库产品,应用领域正逐步扩大,而采用.NET技术开发其相关应用将是今后的主流。