Remote Data Access (RDA) 是 SQL Server CE 2.0 內建的輕量級同步機制,讓 Pocket PC (PPC) 等 Windows CE 裝置能透過 HTTP/HTTPS 協定,經由 IIS 與桌面端 SQL Server 2000 進行資料推拉。本文完整說明架構、元件、開發步驟與程式碼範例。
架構總覽
[Pocket PC 裝置] [桌面伺服器]
┌─────────────────────────┐ HTTP/HTTPS ┌─────────────────────────┐
│ SQL Server CE │ ◄──────────────────► │ IIS + SQL Server │
│ ┌───────────────────┐ │ │ ┌───────────────────┐ │
│ │ Database Engine │ │ │ │ SQL Server CE │ │
│ │ Replication Obj │ │ │ │ Server Agent │ │
│ │ RDA Object │ │ │ │ (ISAPI DLL) │ │
│ └───────────────────┘ │ │ └───────────────────┘ │
└─────────────────────────┘ └─────────────────────────┘
▲ ▲
本地 .sdf 檔案 SQL Server 資料庫
三大運作環境
| 環境 | 角色 | 必要元件 |
| 開發環境 | 建置智慧裝置專案 | VS.NET 2003 / eMbedded Visual Tools 3.0 + Pocket PC SDK |
| 用戶端環境 | 執行應用程式 | Pocket PC 裝置 + SQL Server CE + ActiveSync (離線同步用) |
| 伺服器環境 | 提供同步服務 | IIS + SQL Server 2000 (同機或分離部署) |
核心元件職責
- Database Engine:管理裝置端資料儲存,追蹤 INSERT/UPDATE/DELETE 變更
- SQL Server CE Client Agent:裝置端連線元件,包含 Replication 物件、RDA 物件、Database Engine
- SQL Server CE Server Agent:IIS 上的 ISAPI 延伸模組 (
sscesa20.dll),處理 HTTP 請求、連接 SQL Server、回傳資料列集
RDA 物件核心方法
| 方法 | 用途 | 關鍵參數 |
| Pull | 從伺服器下載資料到本地 | SQL 查詢、本地資料表名、連接字串、RDA 選項 |
| Push | 上傳本地變更到伺服器 | 本地資料表名、連接字串、RDA 選項 |
| SubmitSQL | 在伺服器執行 SQL 陳述式 | SQL 陳述式、連接字串 |
VB.NET 智慧裝置專案完整範例
1. 參考設定
專案 → 加入參考 → System.Data.SqlServerCe.dll (通常在 \Program Files\Microsoft SQL Server 2000 Windows CE Edition\)
2. Pull 程式碼:下載伺服器資料
Imports System.Data.SqlServerCe
Public Sub PullData()
Dim rda As New SqlCeRemoteDataAccess()
rda.InternetUrl = "https://desktop-server/sqlce/sa_ppc.dll" ' Server Agent URL
Dim connStr As String = "Data Source=\My Documents\MyData.sdf;Password='pwd'"
Try
' 下載查詢結果到本地 Customers 表 (不存在會自動建立)
rda.Pull(
"Customers", ' 本地資料表名
"SELECT * FROM Customers", ' 伺服器查詢
connStr, ' 本地連接字串
SqlCeRemoteDataAccess.RdaOptions.Default
)
MessageBox.Show("資料下載完成,筆數: " & GetLocalCount())
Catch ex As SqlCeException
MessageBox.Show("RDA 錯誤: " & ex.Message)
Finally
rda.Dispose()
End Try
End Sub
3. Push 程式碼:上傳本地變更
Public Sub PushData()
Dim rda As New SqlCeRemoteDataAccess()
rda.InternetUrl = "https://desktop-server/sqlce/sa_ppc.dll"
Dim connStr As String = "Data Source=\My Documents\MyData.sdf;Password='pwd'"
Try
' 推送本地 Customers 表變更至伺服器
rda.Push(
"Customers", ' 本地資料表名 (需有主鍵)
connStr,
SqlCeRemoteDataAccess.RdaOptions.Default
)
MessageBox.Show("資料上傳完成")
Catch ex As SqlCeException
MessageBox.Show("推送失敗: " & ex.Message)
Finally
rda.Dispose()
End Try
End Sub
4. SubmitSQL 程式碼:伺服器端執行任意 SQL
Public Sub ExecuteServerSQL()
Dim rda As New SqlCeRemoteDataAccess()
rda.InternetUrl = "https://desktop-server/sqlce/sa_ppc.dll"
Dim serverConn As String = "Provider=SQLOLEDB;Data Source=desktop-server;Initial Catalog=Northwind;User ID=sa;Password=pwd"
Try
rda.SubmitSQL(
"UPDATE Customers SET ContactName = 'New Name' WHERE CustomerID = 'ALFKI'",
serverConn
)
Catch ex As SqlCeException
MessageBox.Show("伺服器 SQL 執行失敗: " & ex.Message)
Finally
rda.Dispose()
End Try
End Sub
RDA vs 合併式複寫 選擇指南
| 特性 | RDA | 合併式複寫 |
| 架構複雜度 | 簡單 (單向 Pull/Push) | 複雜 (雙向、衝突解決) |
| 離線衝突處理 | 無 (最後寫入者勝) | 完整 (優先順序、自訂解決器) |
| 資料量適用性 | 中小量、簡單結構 | 大量、複雜關聯 |
| 開發努力 | 低 | 高 |
| 頻寬優化 | 基本 | 壓縮、增量 |
部署檢核清單
- [ ] IIS 安裝並啟用 ISAPI 延伸模組
- [ ] 虛擬目錄對應
C:\Program Files\Microsoft SQL Server 2000 Windows CE Edition\Server\
- [ ]
sscesa20.dll 註冊正確 (執行 regsvr32 sscesa20.dll)
- [ ] SQL Server 啟用 TCP/IP、命名管道
- [ ] 防火牆開放 HTTP (80) / HTTPS (443) 連接埠
- [ ] ActiveSync 設定正確 (USB/紅外線/藍牙同步備用)
- [ ] 裝置端 .sdf 檔案密碼與伺服器連接字串驗證通過
結語
RDA 以簡單易用著稱,適合「偶爾連線、資料結構單純、衝突機率低」的行動應用。若需雙向複寫、衝突解決、大量資料增量同步,請投資合併式複寫架構。
- 上一篇文章: 深入掌握 SQL Server 鎖機制與並發控制
- 下一篇文章: SQL Server 連接架構與用戶端程式庫完整解析
Copyright ©
程式碼之家 All Rights Reserved