在.NET Campact Framework常用SQL CE數據庫進行數據存儲,SQL CE是一個擴 展名為*.sdf的文件數據庫,曾經命名為SQL Server for Windows CE和SQL Server Mobile Edition,最新版本命名為SQL Server Compact Edition,在文章 中統一叫SQL CE。本文主要講述SQL CE 3.0和SQL CE 3.5的兼容性問題。
.NET Campact Framework下開發SQL CE統一使用 System.Data.SqlServerCe.dll,該dll封裝的命名空間和類是一致的,所以程序 代碼是統一的。但是由於*.sdf數據文件格式不一樣,MS提供不同版本 System.Data.SqlServerCe.dll,其相關組件存放的位置也不一樣。
在vs2005下開發默認使用CF.net的版本為2.0,同時默認使用的SQL CE版本是 3.0。一般在以下目錄 C:\Program Files\Microsoft Visual Studio 8 \SmartDevices\SDK\SQL Server\Mobile\v3.0或者C:\Program Files\Microsoft SQL Server 2005 Mobile Edition\Device\Mobile\v3.0。
在vs2008下開發默認使用CF.net的版本為3.5,但是可以選擇2.0,同時默認使 用的SQL CE版本是3.5。一般存放在C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\。
sdf數據文件和System.Data.SqlServerCe.dll是一對一綁定,3.5的sdf數據文 件只能用3.5的SqlServerCe.dll,3.0的sdf數據文件只能用3.0的 SqlServerCe.dll的,彼此互不兼容。
如果使用3.0的SqlServerCe.dll訪問3.5的sdf數據文件會有以下異常
System.Data.SqlServerCe.SqlCeException : You are trying to access an older version of a SQL Server
Mobile database. If this is a SQL Server CE 1.0 or 2.0 database, run upgrade.exe.
If this is a SQL Server Mobile 3.0 database, run Compact / Repair.
[ Db version = 3505053,Requested version = 3004180,File name = DB\db.sdf ]
at System.Data.SqlServerCe.SqlCeConnection.ProcessResults()
at System.Data.SqlServerCe.SqlCeConnection.Open()
at System.Data.SqlServerCe.SqlCeConnection.Open()
如果使用3.0的SqlServerCe.dll訪問3.5的sdf數據文件會有以下異常
System.Data.SqlServerCe.SqlCeInvalidDatabaseFormatException : Unspecified error
at System.Data.SqlServerCe.SqlCeConnection.ProcessResults()
at System.Data.SqlServerCe.SqlCeConnection.Open()
at System.Data.SqlServerCe.SqlCeConnection.Open()
解決方法
由於在CF.NET下開發SQL CE 3.0和3.5的代碼是一樣,可以參考 .NET Compact Framework下SQL CE的使用,所以最簡單的解決方法是升級3.0到3.5,這樣原先使 用3.0的程序可以在不修改源碼的情況下使用3.5。
數據文件升級
使用vs2008打開3.0的sdf文件
點擊OK進行升級。
程序引用的升級
在項目的引用中刪除System.Data.SqlServerCe的引用,添加 C:\Program Files\Microsoft SQL Server Compact Edition\v3.5 \Devices\System.Data.SqlServerCe.dll到新引用。
在設備上安裝SQL CE 3.5
下載SQL CE 3.5 可參考 SQL Server Express和SQL Server Compact的應用, 安裝後可以在 C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\wce500下選擇相應的硬件平台進行安裝。
初步試了一下,natice的C++代碼不能源碼級支持兩個不同的版本,需要進一 步的研究才知道原因。