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