一、前言
相信有Windows CE 或 Windows Mobile 開發經驗的人員都或多或少要對移動終端的數據進行推送至SQL Server或是向SQL Server請求數據。但是用什么方法進行呢?相信大家立即會想到Microsoft ActiveSync,這也是個不錯的選擇,但這個方法只是針對文件的Copy、Paste、Delete等操作,還是有一定的局限性。另外大家也會想到經TCP/IP通過Socket或Web Service等進行數據同步,直接向SQL Server請求和推送數據,但是這個難度就在于Socket或Web Service的開發了。本文將介紹通過“RDA(遠程數據訪問)”方法,給大家參考,只要少少代碼和設置便可以輕松實現了。
二、創建快照文件夾
1打開資源管理器中,在C盤下創建一個名為snapshot的新文件夾。右鍵單擊snapshot文件夾,然后選擇共享和安全。
2 在共享選項卡,選擇共享該文件夾,然后單擊權限。
3 在共享權限頁中,單擊添加。

4 單擊高級,單擊立即查找,選擇登陸用戶名,單擊確定。
5 在snapshot的權限中,為剛才分配的用戶選中更改和讀取權限,然后單擊確定。
6選擇安全選項卡,單擊添加,添加剛才的用戶到用戶列表中。
7選擇用戶,分配以下權限:
-讀取和執行
-列出文件夾目錄
-讀取
-寫入
8單擊確定關閉快照屬性窗口。
9關閉 Windows 資源管理器。
注:如果你的電腦啟用了簡單文件夾共享,請選擇工具,單擊文件夾選項,在查看選項頁中去除簡單文件夾共享。這樣才看到第2步以下的內容。
三、配置SQL Server Compact的Web同步。
如果你的PC上沒有安裝Microsoft SQL Server 2005 Compact Edition Server Tools,請到http://www.microsoft.com/downloads/details.aspx?FamilyId=4E45F676-E69A-4F7F-A016-C1585ACF4310&displaylang=zh-cn 進行下載。
1單擊開始->所有程序-> Microsoft SQL Server 2005 Compact Edition->配置 Web 同步向導。
2在歡迎使用配置 Web 同步向導頁上,單擊下一步。
3在訂閱服務器類型頁上,選擇SQL Server Compact Edition,單擊下一步。
4在Web 服務器頁中,選擇創建新的虛擬目錄,然后選擇默認網站。單擊下一步。剩余的步驟用于創建新的虛擬目錄。

5在虛擬目錄信息頁上,在別名文本框中,輸入虛擬目錄名稱。在路徑文本框中設置虛擬目錄的本地文件路徑(可默認),然后單擊下一步。
6在安全通信頁上,默認選擇不需要使用安全通道(SSL)。用戶將通過以 http:// 開頭的 URL 字符串訪問您的虛擬目錄,然后單擊下一步。
7在客戶端身份驗證頁上,選擇將對客戶端進行身份驗證。要求輸入用戶名和密碼,然后單擊下一步。
8在“需經身份驗證的訪問”頁上,選擇要使用的身份驗證類型,這里選擇集成 Windows 身份驗證。然后單擊下一步。
9在目錄訪問頁上,添加登陸用戶權限,然后單擊下一步。
10在快照共享訪問頁上,選擇每第一步中的快照,然后單擊下一步。
11單擊完成,完成創建并配置虛擬目錄后,單擊關閉。 注:你的PC機上必需安裝有IIS
四、建立測試數據庫
1 打開SQL Server Management Studio,新建查詢,輸入以下內容:
USE master;
GO
IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'SQLMobile')
BEGIN
    DROP Database SQLMobile;
END
GO
CREATE DATABASE SQLMobile;
GO
USE SQLMobile;
GO
CREATE TABLE Test (ID INTEGER IDENTITY (1,1)
CONSTRAINT pkID PRIMARY KEY, Test NVarChar (50));
GO
insert into Test (Test) values('Test1')
insert into Test (Test) values('Test2')
GO
打開Windows CE 的Query Analyzer 在路徑/Program Files/SQLMobile下建立命名為sqlmobile的測試數據庫。

五、 建立示例程序
1 打開Microsoft Visual Studio 2005,建立Windows CE的Device Application應用程序,命名為SQLMobile。
2 刪除菜單,添加兩個button,并命名為Push(推送)和Pull(請示),閏添加單擊事件。
3在程序中添加System.Data.SqlServerCe的引用,并Using到程序中。
4在Push的單擊事件中添加以下代碼:
string ConnectString = @"Provider=SQLOLEDB; Data Source=***; Initial Catalog=SQLMobile; User ID=sa;Password = ***";
SqlCeRemoteDataAccess rda = null;
try
{
rda = new SqlCeRemoteDataAccess(@"http://192.168.1.3/SQLMobile/sqlcesa30.dll", @"Data Source=/Program Files/sqlmobile/test.sdf");
rda.InternetLogin = "***";
rda.InternetPassword = "***";
rda.Push("Test", ConnectString, RdaBatchOption.BatchingOff);
MessageBox.Show("Push OK.");
}
catch (SqlCeException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
rda.Dispose();
}
 
5 在Pull的單擊事件中添加以下代碼:
string ConnectString = @"Provider=SQLOLEDB; Data Source=***; Initial Catalog=SQLMobile; User ID=sa;Password = ***";
SqlCeRemoteDataAccess rda = null;
try
{
rda = new SqlCeRemoteDataAccess(
@"http://192.168.1.3/SQLMobile/sqlcesa30.dll",
"***",
"***",
@"Data Source=/Program Files/sqlmobile/test.sdf ");
rda.Pull("Table_1", "SELECT * FROM Table_1", ConnectString,
RdaTrackOption.TrackingOnWithIndexes);
MessageBox.Show("Pull OK.");
}
catch (SqlCeException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
rda.Dispose();
}
 
6將程序下載到移動終端機上,進行測試。
六、測試
打開SQLMobile程序,點擊Pull,出現MessageBox“Pull OK.”即已經將表Test請求到了本地sqlmobile.sdf數據庫中。

在sqlmobile.sdf,添加兩行數據后,點擊Push,出現MessageBox“Pusk OK.”,即已經將新增的兩行數據添加到了SQL Server的Test表中。

七、問題匯總
1 A request to send data to the computer running IIS has failed。For more information, see HRESULT.這些問題請查看你的IIS配置,用戶名或密碼。

2 Failure to Open SQL Server with given connect string, […..]
此問題請查看你的防火墻設置和你的SQL Server用戶名和密碼。
3The Local Table Name parameter is already specified. [Table name = Test]
此問題是因為windows CE中已經存在名為Test的表,將此表刪除即可。

4 SQL Mobile encountered problems when opening the database.
此問題是你的sqlmobile.sdf 數據庫密碼錯誤,如果有密碼請更改連接字符串為:Data Source=/Program Files/SQLMobile/sqlmobile.sdf;Password=**

新聞熱點
疑難解答