SQL Server Express 连接到 .mdf 文件

Posted

技术标签:

【中文标题】SQL Server Express 连接到 .mdf 文件【英文标题】:SQL Server Express connection to .mdf file 【发布时间】:2018-07-03 23:57:18 【问题描述】:

两部分问题。

我已经使用 VS 2015 Update 3 创建了一个 ASP.NET MVC 5 应用程序。我在本地机器上完成了这个项目。突然,我无法再通过 SQL Server 对象资源管理器连接到 .mdf 数据库文件并收到以下错误:

无法打开数据库“aspnet-DevilsTowerMVC-20180327093314”,因为它是 852 版本。此服务器支持 782 及更早版本。不支持降级路径。无法打开新数据库“aspnet-DevilsTowerMVC-20180327093314”。 CREATE DATABASE 被中止。无法将文件“D:\VS2015\DevilsTowerMVC\App_Data\aspnet-DevilsTowerMVC-20180327093314.mdf”附加为数据库“aspnet-DevilsTowerMVC-20180327093314”。

我的机器上安装了 SQL Server 2012 (11.0.5388.0)。该项目是使用 VS 2015 创建的。我在 SO 上看到了 similar question,但这并没有提供明确的答案。

我刚刚在 VS 2015 中创建了另一个 ASP.NET MVC 5 应用程序,并且登录工作完美(如 SQL Server 12.00.2000)。所以我不明白我现有的项目是如何神秘地恢复到旧版本的?

根据我的研究,SQL Server 2016 的内部数据库版本号为 852,SQL Server 2014 的内部数据库版本号为 782。我安装的 SQL Server 2012 的内部数据库版本号为 706,所以我不知道为什么它在错误消息中提到“782”。

(Q1) 如果我无法降级,那么我唯一的选择可能是安装 SQL Server 2016 Express?这是正确的吗?正确执行此操作的步骤是什么?如果没有,有没有办法“重置”它 - 新创建的项目可以正常工作?

(Q2)如何将其转换为在 SSMS 中使用常规的非基于文件的 SQL Server 数据库?

我的 web.config:

<connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-DevilsTowerMVC-20180327093314.mdf;Initial Catalog=aspnet-DevilsTowerMVC-20180327093314;Integrated Security=True" 
         providerName="System.Data.SqlClient" />
</connectionStrings>

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
            <parameter value="mssqllocaldb"/>
        </parameters>
   </defaultConnectionFactory>
</entityFramework>

更新 1

我从here 下载了 SQL Server 2016 SP1 Express Edition。我选择了下载媒体/LocalDB 选项。它似乎安装正确。但是,当我在 Server Explorer 中选择 DefaultConnection 并点击刷新时,我得到与以前完全相同的错误。我尝试了连接字符串中的所有组合,例如:(LocalDb)(LocalDb)\v11.0(LocalDb)\MSSQLLocalDB

当我查看 C:\Windows\SysWOW64 文件夹时,我看到 SQLServerManager11.msc 配置管理器仍然安装。

更新 2

我从 App_Data 文件夹中删除了 .mdf 文件,并尝试通过注册新用户来重新创建它。创建了一个 DefaultConnection.mdf 文件,但是当我尝试在服务器资源管理器中添加它时,我得到了与以前相同的版本错误消息。谁能建议一种兑换项目登录系统的方法?

【问题讨论】:

【参考方案1】:

1) 遗憾的是,您无法降级,您必须获得相同的版本。 2)据我所知,您可以使用 .mdf 文件恢复数据库,但从技术上讲,它们都应该是基于文件的。如果你有 mdf 文件,你可以恢复它,然后相应地更改你的连接字符串。

【讨论】:

1) 我需要安装/配置的详细信息。 2) 如何备份/恢复 .mdf 文件? 1) 我对配置并不太关心,因为每个人的做法都不一样,尽管您可能会保持原样。如果需要,您可以从这里获得 2016 express:microsoft.com/en-us/download/details.aspx?id=54284 2) 右键单击​​数据库 > 任务 > 备份,选择完整备份类型,仅此而已。要恢复数据库,请右键单击数据库文件夹,然后单击恢复并选择您的备份。【参考方案2】:

在 Yair M 对this question 的回答的帮助下,我设法解决了这个问题。

我首先使用控制面板 --> 程序和功能物理卸载了所有版本的 LocalDb,除了与我的 SQL Server 2012 版本相对应的 v11.0 版本。

然后使用命令行,我发出了以下命令:

sqllocaldb 删除“v11.0”

sqllocaldb 创建“v11.0”

这解决了当我尝试注册新用户时,基于文件的 LocalDb 实例被擦除而不是重新创建的问题。

此时我可以注册一个新用户而不会出现任何错误消息。但是,我想离开 LocalDB。

所以,我在 SSMS 中创建了一个空数据库并将 .mdf 文件附加到它。我更新了连接字符串以使用实际的数据库和集成安全性(用于本地开发)。我在运行应用程序时遇到了一些权限错误,但能够通过创建新用户并授予其读写权限来解决此问题。

<add name="DefaultConnection" 
  connectionString="Initial Catalog=DevilsTower;Data Source=Development;Integrated Security=SSPI;" 
    providerName="System.Data.SqlClient" />

【讨论】:

以上是关于SQL Server Express 连接到 .mdf 文件的主要内容,如果未能解决你的问题,请参考以下文章

将 VWD Express 2008 连接到 SQL Server Express 2005 时出现问题

SQL Server Express 连接到 .mdf 文件

Tomcat 未连接到 SQL Server Express

通过 Internet 连接到 SQL Server Express 2012

通过sql server express将Android应用程序连接到sql server

从 SSMS 连接到在容器内运行的 SQL Server Express