摘要:本文通過一個簡單一實例,介紹了在.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).