将 SQL Server CE 数据库 (.sdf) 从 3.5 更新到 4.0

Posted

技术标签:

【中文标题】将 SQL Server CE 数据库 (.sdf) 从 3.5 更新到 4.0【英文标题】:Update SQL Server CE database (.sdf) from 3.5 to 4.0 【发布时间】:2012-12-06 15:00:26 【问题描述】:

我需要将 SQL Server Compact 数据库从 3.5 升级到 4.0 版本。我正在使用 linq-to-sql

我尝试了一些在 *** 上发现的东西,但没有帮助:

    我尝试了Add 4.0 connection 对话框(没有错误消息,bak 文件已创建)

    我尝试在代码中升级:(没有错误消息)

    System.Data.SqlServerCe.SqlCeEngine engine= new System.Data.SqlServerCe.SqlCeEngine("Data source = ...");
    engine.Upgrade();
    

    我检查了数据库损坏(系统返回没有损坏问题)

    System.Data.SqlServerCe.SqlCeEngine engine= new System.Data.SqlServerCe.SqlCeEngine("Data source = ...");
    engine.Verify();
    

    在这些操作之后,我想重新创建 dbml 文件 - 我收到了错误消息

    不兼容的数据库版本 (..) DB 版本 4000000,请求的版本 3505053 (..)

    在调试模式下,我检查了db.Connection.ServerVersion = 返回 3.5.8080.0

    在数据库连接属性版本是 4.0.8876.1

有什么建议吗?

【问题讨论】:

【参考方案1】:

将数据库升级到 4.0 后,您将无法再创建 dbml 文件,因为负责此操作的工具仅适用于 3.5 数据库文件。一种可能的解决方法是拥有两个版本的数据库,一个 3.5 用于生成 dbml,另一个用于使用。请记住使用 SqlCeConnection 对象初始化 DataContext 对象,否则 4.0 将无法使用 LINQ to SQL - 或者您可以尝试我的 SQL Server Compact Toolbox,它允许您直接从 4.0 数据库文件生成 DataContext(仍然必须使用 SqlCeConnection 初始化对象)

【讨论】:

@ErikEJ 在我的情况下,即使在我使用 SQL Server Compact Toolbox 生成 DataContext 之后,我仍然需要使用 SqlCeConnection 对象对其进行初始化,否则我会遇到此“不兼容的数据库版本”错误。

以上是关于将 SQL Server CE 数据库 (.sdf) 从 3.5 更新到 4.0的主要内容,如果未能解决你的问题,请参考以下文章

生成 SQL Server CE 数据库的快照与简单地复制 .SDF 文件有何不同?

如何在 VS2008 和 SQL Server CE 上基于现有的 .sdf 文件创建空本地数据库

通过 Python 加载、查询 SQL Server CE 4.0 数据库文件

插入到 SQL Server CE 数据库

将数据插入 Windows Phone 的 SQL Server CE

将 MSSQL2008 *.bak 文件转换为 SQL-CE *.sdf