背景:JET Engine 的困境
Microsoft JET Engine(Access MDB 檔案)長期作為輕量級 In-Process 資料庫引擎廣泛使用於桌面應用與小型網站。但其缺點明顯:
- 安全性較弱,易遭竄改。
- 無 64 位元版本,微軟官方確認不會推出 64-bit JET,導致 64-bit 應用程式無法直接使用(需啟用 WoW64 相容模式)。
- SQL 語法為 JET SQL,與 T-SQL 差異大,維護雙語法成本高。
SQL Server Compact Edition 3.5:原生 T-SQL 子集的輕量引擎
核心優勢
- In-Process、檔案基礎:單一
.sdf 檔案,無需獨立服務進程,部署極簡(XCOPY 部署)。
- T-SQL 真子集:支援標準 T-SQL 查詢、預存程序、觸發器、索引、交易,語法與 SQL Server 高度一致,遷移成本極低。
- ADO.NET Provider 整合:
System.Data.SqlServerCe 命名空間,與 SqlClient 程式模型幾乎相同。
- 加密支援:建立資料庫時可指定密碼,檔案層級 AES 加密。
版本演進與 64-bit 支援
- VS 2005 內建 SQL CE 3.1
- VS 2008 (SQL Server 2008 Beta 2) 內建 SQL CE 3.5
- SQL CE 3.5 同樣無原生 64-bit 版本(32-bit 在 WoW64 可運行)。
- 官方承諾下一版本提供 native 64-bit 版本(後來在 SQL CE 4.0 實現)。
關鍵轉折:Microsoft Synchronization Services for ADO.NET
什麼是 Synchronization Services?
一個類別庫(非獨立程式),命名空間保留 Microsoft.Synchronization 與 Microsoft.Synchronization.Data(早期為 SqlCe.Sync)。核心功能:異構資料庫同步。
同步架構核心概念
| 元件 | 角色 |
| Client Provider | 本端資料庫(如 SQL CE .sdf)的同步介面 |
| Server Provider | 遠端資料庫(如 SQL Server/Express/Oracle/任意 ADO.NET 來源)的同步介面 |
| SyncAgent | 協調雙方 Provider 執行同步的核心類別 |
| SyncTable | 定義參與同步的資料表、篩選條件、衝突解決策略 |
支援拓撲
- 2-Tier:Client 直接同步 Server(需 Server 開放連線)。
- N-Tier:透過 WCF/Web Service 代理同步,Server 端不直接暴露資料庫連線。
- Peer-to-Peer:多 Client 互相同步(需衝突解決邏輯)。
為何這改變一切?
- 解決異構同步難題:SQL CE ↔ SQL Server、SQL CE ↔ Oracle、SQL CE ↔ MySQL 皆可,只要有 ADO.NET Provider。
- 離線優先架構:Client 端使用 SQL CE 完整運作,連線恢復時自動同步,適合行動/間歇性連線應用。
- 免寫同步邏輯:框架處理變更追蹤、衝突偵測、雙向同步、批次傳輸,開發者專注業務邏輯。
- 不需 IIS/SQL Express 綁定:Client-to-Client 同步無需伺服器端基礎設施。
實務部署建議
- 評估資料量:SQL CE 適合單機 < 4GB 資料庫(3.5 版限制 4GB,4.0 版放寬至 256GB)。
- 同步篩選:定義
SyncTable 時使用參數化篩選(如 WHERE user_id = @user_id),避免全量同步。
- 衝突解決:預設「Server 勝出」,可自訂
ResolveConflict 事件實作業務邏輯(最後寫入勝、合併、使用者介入)。
- 初始化策略:首次同步可用備份還原或大量匯入建立 Client 基準,避免逐列同步耗時。
- 監控與記錄:記錄同步統計(新增/更新/刪除筆數、耗時、錯誤),納入應用程式遙測。
官方資源與後續發展
- SQL Server Compact 官方頁面:
https://www.microsoft.com/sql/editions/compact/default.mspx
- SQL CE 4.0(2011 釋出)提供原生 64-bit、ASP.NET 整合、Entity Framework 支援、無檔案大小限制。
- Microsoft Sync Framework 2.1(2010)為最終獨立版本,後續功能併入 Azure Data Sync、Entity Framework Core 等現代技術棧。
結論
SQL Server Compact 3.5 + Synchronization Services 為 JET Engine 提供了功能更強、語法一致、支援離線同步的現代化替代方案。雖 3.5 版仍為 32-bit,但結合 WoW64 相容層與後續 4.0 版原生 64-bit 支援,已成為輕量級資料庫應用的主流選擇。對於需離線運作、異構同步、零部署的桌面/行動應用,此組合極具吸引力。
- 上一篇文章: SQL Server 2005 系統表完整目錄與核心欄位說明
- 下一篇文章: EMS SQL Manager for MySQL 常見問題解答:註冊資料庫與主機快速入門
Copyright ©
程式碼之家 All Rights Reserved