嵌入式SQL CE在圖書外采查重系統(tǒng)中的應(yīng)用
1.4 遠(yuǎn)程數(shù)據(jù)訪問RDA
圖書館都有圖書館自動化集成系統(tǒng),數(shù)據(jù)都存儲在大型數(shù)據(jù)庫系統(tǒng)中,例如Oracle、SQL Server 2000/2005、Sybase等。在任何一個分布式移動應(yīng)用環(huán)境中,移動設(shè)備與數(shù)據(jù)中心的數(shù)據(jù)交互是要解決的重點問題,在系統(tǒng)設(shè)計中,如何實現(xiàn)智能手機中的數(shù)據(jù)庫與圖書館數(shù)據(jù)庫一致最為關(guān)鍵,這就是數(shù)據(jù)同步。
SQL Server CE數(shù)據(jù)庫通過IIS和遠(yuǎn)程數(shù)據(jù)訪問RDA與SQL Server數(shù)據(jù)庫進行通信,遠(yuǎn)程數(shù)據(jù)訪問RDA為智能手機應(yīng)用程序訪問SQL Server數(shù)據(jù)庫提供了一種簡單的訪問方式,可以將SQL Server數(shù)據(jù)庫的數(shù)據(jù)下載到智能手機的SQL Server CE數(shù)據(jù)庫中,也可以將智能手機的數(shù)據(jù)寫入到SQL Server 數(shù)據(jù)庫中,這樣就實現(xiàn)了數(shù)據(jù)同步,RDA非常適合開發(fā)離線數(shù)據(jù)解決方案。
圖書外采查重系統(tǒng)使用遠(yuǎn)程數(shù)據(jù)訪問RDA技術(shù)實現(xiàn)了數(shù)據(jù)同步,RDA主要由SQL Server CE數(shù)據(jù)庫引擎、SQL Server CE客戶端代理和SQL Server CE服務(wù)器端代理三部分組成。并且RDA提供了如下三個主要方法實現(xiàn)SQL Server CE與SQL Server數(shù)據(jù)同步。
(1)Pull方法:將SQL Server數(shù)據(jù)庫中的表“拉”到SQL Server CE中。在調(diào)用此方法時,可以設(shè)置數(shù)據(jù)跟蹤選項,如果設(shè)置數(shù)據(jù)跟蹤,則SQL Server CE數(shù)據(jù)庫引擎會自動跟蹤對數(shù)據(jù)的插入、修改和刪除操作。
(2)Push方法:如果在Pull時設(shè)置了數(shù)據(jù)跟蹤選項,可以將SQL Server CE中的數(shù)據(jù)“推”回到SQL Server中,在SQL Server CE中對數(shù)據(jù)的任何修改都會反映到SQL Server中。
(3)SubmitSQL方法:直接向SQL Server數(shù)據(jù)庫提交一個命令。
2 系統(tǒng)設(shè)計與實現(xiàn)
2.1 建立數(shù)據(jù)庫
嵌入式數(shù)據(jù)庫SQL Server CE的數(shù)據(jù)存儲在一個擴展名為.SDF的文件中,SQL Server CE 只支持一次一個鏈接,但多個命令可以共享同一鏈接。.NET Compact Framework下開發(fā)SQL Server CE統(tǒng)一使用System.Data.SqlServerCe.DLL[2],該DLL封裝的命名空間和類是一致的,在VS2008下開發(fā)默認(rèn)使用的.NET Compact Framework版本是3.5,默認(rèn)使用的SQL Server CE版本是3.5,一般存放在C:Program FilesMicrosoft SQL Server Compact Editionv3.5Devices路徑下。在智能手機上創(chuàng)建一個空的本地SQL Server CE數(shù)據(jù)庫,建立數(shù)據(jù)庫程序代碼如下:
//創(chuàng)建SQL Server CE數(shù)據(jù)庫文件LIBRARY.SDF
using System.Data.SqlServerCe;
string strConn=DATASOURCE=+dbPath+@LIBRARY.SDF;
SqlCeEngine engine=new SqlCeEngine(strConn);
engine.CreateDatabase();
engine.Dispose();
2.2 數(shù)據(jù)同步
數(shù)據(jù)同步功能指通過遠(yuǎn)程數(shù)據(jù)訪問RDA從圖書館自動化集成系統(tǒng)SQL Server數(shù)據(jù)庫將藏書數(shù)據(jù)下載到智能手機的LIBRARY.SDF數(shù)據(jù)庫中。遠(yuǎn)程數(shù)據(jù)訪問RDA需要用到.NET Compact Framework 3.5中System.Data.SqlServerCe命名空間中的SqlCeRemoteDataAccess類[3-4],數(shù)據(jù)同步程序代碼如下:
//引用命名空間SqlCeRemoteDataAccess
using SqlCeRemoteDataAccess;
//實例化并配置遠(yuǎn)程數(shù)據(jù)訪問
//SQLCeRemoteDataAccess對象
SqlCeRemoteDataAccess rda=new SqlCeRemoteDataAccess();
rda.InternetUrl=http://216.210.98.2/SQLServerMobile/
SQLcesa30.dll;
rda.InternetLogin=IISUserName;
rda.InternetPassword=IISPassword;
rda.LocalConnectionString=DATASOURCE=+dbPath+
@LIBRARY.SDF;
//從SQL Server數(shù)據(jù)庫中同步數(shù)據(jù)
rda.Pull(Books,SELECT ISBN,Title,Author,BookConcern,Amount FROM Books,Provider=SQLOledb;Server=LIS_Server;Database=LIS;uid=GD;pwd=GD;,RdaTrackOption.TrackingOnWithIndexes,ErrorTable);
2.3 圖書查重設(shè)計
通過遠(yuǎn)程數(shù)據(jù)訪問RDA將圖書館自動化集成系統(tǒng)中的藏書數(shù)據(jù)同步到智能手機的數(shù)據(jù)庫LIBRARY.SDF中,圖書外采時,智能手機應(yīng)用程序鏈接SQL Server CE數(shù)據(jù)庫LIBRARY.SDF,檢索Books數(shù)據(jù)表中是否有相關(guān)圖書記錄。
開發(fā)手機數(shù)據(jù)庫程序所用到的控件和類與開發(fā)桌面數(shù)據(jù)庫程序具有相似性,如SqlCeConnection對應(yīng)SqlConnection,SqlCeDataAdapter對應(yīng)SqlDataAdapter,SqlCeCommand對應(yīng)SqlCommand等。圖書外采查重系統(tǒng)基于.NET Compact Framework3.5設(shè)計,要在智能手機上創(chuàng)建、管理和查詢SQL Server CE數(shù)據(jù)庫,必須在程序中添加對System.Data.SqlServerCe的引用,圖書查重程序代碼如下:
//命名空間System.Data.SqlServerCe using System.Data.SqlServerCe;
//創(chuàng)建SqlCeConnection對象,鏈接數(shù)據(jù)庫文件LIBRARY.SDF
SqlCeConnection objCeConnection=new SqlCeConnection(DATASOURCE=+dbPath+@LIBRARY.SDF);
objCeConnection.Open(); //根據(jù)ISBN號,生成圖書查詢SQL語句
SQLText = SELECT×FROM Books WHERE ISBN=+txtISBN.Text;
//創(chuàng)建SqlCeCommand對象
SqlCeCommand objCeCommand=new SqlCeCommand(objCeConnection);
objCeCommand.CommandText=SQLText;
//創(chuàng)建SqlCeDataReader對象
SqlCeDataReader objCedr=objCeCommand.ExecuteReader();
//查詢館藏圖書是否存在
if (!objCedr.Read())
{ listBox.Items.Add(館藏沒有ISBN號=
+txtISBN.Text+圖書,可以采購。);}
else
{
listBox.Items.Add(ISBN號:+objCedr[ISBN].ToString());
listBox.Items.Add(書名:+objCedr[Title].ToString());
listBox.Items.Add(作者:+objCedr[Author].ToString());
listBox.Items.Add(出版社:+objCedr[BookConcern].ToString());
listBox.Items.Add(藏書數(shù)量:+objCedr[Amount].ToString()+本);
listBox.Items.Add(館藏圖書已有,建議不要采購!);
}
c++相關(guān)文章:c++教程
評論