用RDA方式同步SQLCE與SQL SERVER資料庫

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.