嵌入式移動(dòng)數據庫SQL Server for Windows CE的應用研究
1 引言
嵌入式移動(dòng)數據庫系統或簡(jiǎn)稱(chēng)為移動(dòng)數據庫(EMDBS),是專(zhuān)門(mén)運行在各種智能型嵌入設備或移動(dòng)設備上的小型數據庫系統。目前已經(jīng)成為一個(gè)十分活躍的研究和應用領(lǐng)域。
Microsoft SQL Server 2000 Windows CE Edition 2.0版簡(jiǎn)稱(chēng)SQL Server CE 2.0,`是用作快速開(kāi)發(fā)的關(guān)系型精簡(jiǎn)數據庫[1],它將企業(yè)數據管理能力擴展到了基于Windows CE操作系統的嵌入式移動(dòng)設備上。SQL Server CE提供遠程數據訪(fǎng)問(wèn)和合并復制功能,確保了移動(dòng)設備SQL Server CE數據庫中的數據能夠可靠地傳輸、能夠離線(xiàn)操作并在晚些時(shí)候與SQL Server服務(wù)器同步,這些使得SQL Server CE成為移動(dòng)和無(wú)線(xiàn)環(huán)境下理想的數據庫。
本文介紹如何采用基于.NET Compact Framework的ADO.NET技術(shù)開(kāi)發(fā)嵌入式移動(dòng)設備的數據庫應用,并將SQL Server CE 數據庫應用于倉庫物料移動(dòng)巡查系統的設計方案。
2 .NET 下開(kāi)發(fā)SQL Server CE的方法
在基于Windows CE的嵌入式移動(dòng)設備上開(kāi)發(fā)SQL Server CE數據庫應用可以使用的工具有EVB,EVC和 Visual Studio .NET(vs2003.net或vs2005.net)。使用EVB或EVC時(shí),通過(guò)ADOCE或OLE DB for SQL Server CE訪(fǎng)問(wèn)SQL Server CE數據庫,編程比較繁瑣。關(guān)于在EVC,EVB下操作數據庫的方法這里不再贅述,具體可參見(jiàn)文獻[2] 。推薦采用Visual Studio.NET,通過(guò)ADO.NET技術(shù)訪(fǎng)問(wèn)操作SQL Server CE數據庫。
Visual Studio.NET開(kāi)發(fā)嵌入式移動(dòng)設備時(shí)采用Smart Device Programmability(SDP,智能設備編程)特性。使用新的C#語(yǔ)言或Visual Basic .NET語(yǔ)言為移動(dòng)或嵌入式設備開(kāi)發(fā)應用程序。在.NET Compact Framework下通過(guò)ADO.NET可方便快捷的訪(fǎng)問(wèn)SQL Server CE數據庫。下面以Visual Basic.net 2003為例簡(jiǎn)述如何通過(guò)ADO.NET實(shí)現對SQL Server CE數據庫的基本操作。
首先,必須在項目中添加對System.Data.SqlServerCe組件的引用,System.Data.SqlServerCe 命名空間為 SQL Server CE.NET Framework 精簡(jiǎn)版數據提供程序。SQL Server CE.NET Framework精簡(jiǎn)版數據提供程序描述了一個(gè)類(lèi)集合,這些類(lèi)可用于在托管環(huán)境下從基于 Windows CE的設備訪(fǎng)問(wèn) SQL Server CE 中的數據庫。通過(guò)使用System.Data.SqlServerCe,可以在任意設備上創(chuàng )建 SQL Server CE 數據庫,還可以建立指向設備上或遠程服務(wù)器上的 SQL Server 數據庫的連接。
應用開(kāi)發(fā)中,根據不同的需求,從System.Data.SqlServerCe 命名空間中選擇相應的類(lèi)進(jìn)行操作。例如:SqlCeEngine類(lèi)包含了SQL Server CE 引擎的屬性、方法及其他對象,可用來(lái)創(chuàng )建一個(gè)新的 SQL Server CE 數據庫。代碼示例如下:
Dim connStr As String = data source=My DocumentsSampleDB.sdf
Dim SQLEngine As System.Data.SqlServerCe.SqlCeEngine
SQLEngine = New System.Data.SqlServerCe.Engine (connStr)
以上代碼完成了在My Documents目錄下創(chuàng )建空的名為SampleDB的數據庫。這里還介紹關(guān)于一個(gè)比較常用的類(lèi)――SqlCeCommand,可用來(lái)表示對數據源執行的 SQL 語(yǔ)句。當需要向已創(chuàng )建的數據庫SampleDB添加一個(gè)名為Bicycle的庫存表,并定義它的相關(guān)字段時(shí)可用以下代碼實(shí)現,其中cn定義了數據源的連接,使用了SqlCeConnection類(lèi):
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創(chuàng )建編輯表單是比較麻煩的過(guò)程,在實(shí)際應用中的做法是在初始化時(shí)只建立空的數據庫,需要的表單采用RDA(遠程數據訪(fǎng)問(wèn))的Pull方法從SQL Server 2000服務(wù)器上“拉”到先前創(chuàng )建的數據庫中。
3 SQL Server CE 數據庫在倉庫物料巡查系統中的應用
倉庫物料巡查傳統上采用的是紙張作業(yè)方式,操作流程是倉庫巡查人員領(lǐng)取物資清單后在出入口進(jìn)行檢查和填寫(xiě)記錄,然后將填好的表格回收到數據中心,數據中心的工作人員再手工將信息錄入計算機系統進(jìn)行處理。缺點(diǎn)是處理周期長(cháng),工作人員工作量大,費時(shí)費力且容易發(fā)生人為錯誤。移動(dòng)解決方案中,倉庫巡查人員只需下載對應物料清單到手持PDA上,選用的PDA采用Windows CE操作系統。對照此清單檢查,現場(chǎng)直接在PDA上記錄,然后將結果上傳。資料的主要處理過(guò)程主要在后端SQL Server 2000服務(wù)器端處理,包括進(jìn)出物料表單的錄入,檢查結果報表的處理、數據維護等。自動(dòng)化程度高,減少了手工錄入處理環(huán)節,PDA具備無(wú)線(xiàn)上網(wǎng)功能后可無(wú)限擴展系統的覆蓋范圍。
因為需要下載物料清單到PDA上,并在PDA上臨時(shí)保存物料清單,所以在PDA上需要有一個(gè)數據庫系統。選擇的移動(dòng)數據庫系統即為SQL Server CE 2.0。同時(shí),系統需要考慮手持PDA上SQL Server CE 2.0與數據中心SQL Server 2000進(jìn)行雙向的數據同步問(wèn)題。
4 SQL Server CE 2.0與SQL Server 2000數據同步設計
SQL Server CE與SQL Server之間可以通過(guò)RDA(遠程數據訪(fǎng)問(wèn))和Replication(合并復制)兩種方式進(jìn)行數據同步。
SQL Server CE 2.0復制功能基于 Microsoft SQL Server 合并復制。只能與SQL Server 2000配合使用。允許分別在便攜式設備和服務(wù)器上自行更新數據。之后可以對該設備和服務(wù)器上的數據進(jìn)行同步,以將客戶(hù)端的更改發(fā)送到服務(wù)器,或從服務(wù)器接收新的更改。與 RDA 相比,使用合并復制卻有許多優(yōu)點(diǎn),如提供了內置和自定義的沖突解決功能,通過(guò)復制可以同時(shí)對多個(gè)表中的數據進(jìn)行同步等。但合并復制需要在服務(wù)器上進(jìn)行更多的配置和維護。
遠程數據訪(fǎng)問(wèn) (RDA) 使移動(dòng)應用程序能夠訪(fǎng)問(wèn)遠程 SQL Server 2000 數據庫表中的數據,并將這些數據存儲在本地 SQL Server CE 2.0 數據庫表中。隨后,該應用程序就可以讀取和更新本地 SQL Server CE 2.0 數據庫表。SQL Server CE 2.0可以選擇跟蹤對本地表所做的所有更改。之后,應用程序可以將本地表中更改過(guò)的記錄更新回 SQL Server 表。在遠程數據訪(fǎng)問(wèn)過(guò)程中,將數據從 SQL Server 表傳播至本地 SQL Server CE 表的過(guò)程稱(chēng)為Pull --“拉”數據。將本地 SQL Server CE 表中所做的更改傳播回 SQL Server 表的過(guò)程稱(chēng)為Push --“推”數據。此外還有SubmitSQL方法可直接向SQL Server 2000數據庫提交一個(gè)無(wú)返回行的命令執行。在不需要使用SQL Server CE 2.0合并復制的全部功能(包括沖突解決)時(shí),適合使用 RDA方式。[3]
本文采用的解決方案中,服務(wù)器端運行SQL Server 2000并采用配置IIS構建應用服務(wù)器,移動(dòng)端采用PDA并配置SQL Server CE 2.0。移動(dòng)端通過(guò)IIS代理訪(fǎng)問(wèn)服務(wù)器端。對表單的同步處理采用RDA方式完成。圖1示意了RDA的方式下的數據同步[4]。
RDA功能實(shí)現主要由三部分組成:SQL Server CE數據庫引擎、SQL Server CE客戶(hù)端代理和SQL Server CE服務(wù)器端代理。用戶(hù)直接通過(guò)SQL Server CE客戶(hù)端代理即可操作數據庫。SQL Server CE客戶(hù)端代理是RDA在移動(dòng)設備上的主要組件,它實(shí)現了RDA的主要功能,可以通過(guò)程序調用它提供的接口以控制RDA;SQL Server CE服務(wù)器端代理位于服務(wù)器端,它與SQL Server CE客戶(hù)端代理通過(guò)HTTP協(xié)議進(jìn)行通信,接收并處理SQL Server CE客戶(hù)端代理的命令。
以下代碼示例如何通過(guò)RDA的Pull方法在移動(dòng)設備上建立“Localtable”表,并下載SQL Server 2000中相應表的數據。使用RDA時(shí)需要創(chuàng )建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 DocumentsSampleDB.sdf;
Const _strInternetURL As String = http:// 10.1.11.25/ssce20/sscesa20.dll
'下載表單過(guò)程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
這里指定兩個(gè)重要的參數:①SQL Server CE服務(wù)器端代理的訪(fǎng)問(wèn)地址, SqlCeRemoteDataAccess.InternetUrl;②連接SQL Server CE數據庫的連接字符串:SqlCeRemoteDataAccess.LocalConnectionString;使用了連接SQL Server2000數據庫的連接字符串_strRemoteConnect和選擇相應表的SQL語(yǔ)句_strSelectTablerToD。
檢查完畢后,表單上傳采用RDA的Push方法, 用法于PULL基本相同,使用SqlCeRemoteDataAccess類(lèi)的Push方法,示例如下:
rda.Push(Localtable , _strRemoteConnect, _
System.Data.SqlServerCe.RdaBatchOption.BatchingOn)
在設計SQL Server CE與SQL Server之間數據同步方案時(shí)應結合自己的數據同步業(yè)務(wù)邏輯靈活選擇運用RDA或合并復制,也可自行設計數據傳輸和辨認規則。本文所述方案只要求對物料清單的同步處理,邏輯規則簡(jiǎn)單,所以采用RDA方式即可便捷實(shí)現。
5結論
本文介紹了微軟.NET Compact Framework架構下,采用ADO.NET開(kāi)發(fā)移動(dòng)設備SQL Server CE數據庫應用的新方法。結合倉庫物料移動(dòng)巡查系統的設計方案研究了嵌入式移動(dòng)數據庫SQL Server CE 2.0和SQL2000的數據同步問(wèn)題。SQL Server CE是目前市場(chǎng)上較為成熟的嵌入式移動(dòng)數據庫產(chǎn)品,應用領(lǐng)域正逐步擴大,而采用.NET技術(shù)開(kāi)發(fā)其相關(guān)應用將是今后的主流。
評論