.NET CF 開發常用 SQL CE (`.sdf` 文件數據庫)。3.0 版 (VS2005 默認) 與 3.5 版 (VS2008 默認) 的 `.sdf` 格式、運行時 DLL 完全不兼容,混用會拋 `SqlCeException` 或 `SqlCeInvalidDatabaseFormatException`。本文詳解異常特徵、版本綁定規則、數據文件升級、程序集引用遷移、設備端部署全流程。
| 項目 | SQL CE 3.0 | SQL CE 3.5 |
|---|---|---|
| VS 默認版本 | VS2005 (CF.NET 2.0) | VS2008 (CF.NET 3.5) |
| 運行時 DLL 路徑 | `C:\Program Files\Microsoft SQL Server 2005 Mobile Edition\Device\Mobile\v3.0` | `C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\` |
| 命名空間/類 | 同 `System.Data.SqlServerCe` | 同 `System.Data.SqlServerCe` |
| .sdf 格式 | 版本 3.0 | 版本 3.5 (不向下兼容) |
// 3.0 DLL 訪問 3.5 .sdf
System.Data.SqlServerCe.SqlCeException:
You are trying to access an older version of a SQL Server Mobile database.
[ Db version = 3505053, Requested version = 3004180, File name = DB\db.sdf ]
// 3.5 DLL 訪問 3.0 .sdf
System.Data.SqlServerCe.SqlCeInvalidDatabaseFormatException: Unspecified error
雙擊 `.sdf` → Server Explorer 打開 → 提示「此文件是舊版本,是否升級?」→ 是 → 自動轉換為 3.5 格式。
// 移除舊引用
// 右鍵引用 → 移除 System.Data.SqlServerCe (v3.0)
// 添加新引用
// 瀏覽到:C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\System.Data.SqlServerCe.dll
CF.NET 2.0/3.5 代碼完全相容 (命名空間、類、方法簽名無變化),重新編譯即可。
托管代碼無縫升級,但 Native C++ (sqlceoledb30.dll / sqlceoledb35.dll) 併發加載會衝突,需:
完成升級後,可享受 3.5 版更好的性能、LINQ to SQL 支援、更大數據庫限制 (4GB vs 256MB) 與 ClickOnce 部署優化。