无法打开,因为它是版本852.此服务器支持版本782及更早版本

时间:2017-09-26 15:59:00

标签: c# sql-server visual-studio-2017 sql-server-2014 sql-server-2016

我正在使用Visual Studio 2017和SQL Server 2014.在将数据库文件附加到Visual Studio时,我收到此错误:

" Adding database connection"

升级文件后,我使用了这个连接字符串

<connectionStrings>
    <add name="con" 
         connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\binaaelmamorra.mdf;Integrated Security=True;Connect Timeout=30"/>
</connectionStrings>

它在我的机器上正常工作,但在客户端计算机上弹出一个错误

  

无法打开,因为它是版本852.此服务器支持版本782及更早版本

虽然我在客户端安装了SQL Server 2016本地数据库,但我仍然无法摆脱它。

我的第二个问题是:数据库文件不兼容的当前SQL Server实例是什么?

Pic 1 enter image description here

5 个答案:

答案 0 :(得分:6)

您的计算机上似乎有多个不同版本的SQL Server实例。

对于&#34;全面发展&#34;版本(Express和up),您可以通过查看SQL Server配置管理器来检查它们的版本:

对于&#34; LocalDB&#34;在SQL Server版本(面向开发人员的版本)中,您可以使用sqllocaldb命令行工具。

使用此命令概述机器上的内容:

C:\> sqllocaldb i

MSSQLLocalDB
v11.0

然后,您可以使用details命令检查各个实例:

C:\> sqllocaldb i mssqllocaldb

Name:               mssqllocaldb
Version:            13.1.4206.0
Shared name:
Owner:              MSE-PC-02\Marc
Auto-create:        Yes
State:              Stopped
Last start time:    27.08.2017 12:24:45
Instance pipe name:


C:\> sqllocaldb i v11.0
Name:               v11.0
Version:            11.0.3000.0
Shared name:
Owner:              MSE-PC-02\Marc
Auto-create:        Yes
State:              Stopped
Last start time:    26.08.2017 15:41:18
Instance pipe name:

因此,这告诉您有两个实例的SQL Server LocalDB可用 - mssqllocaldb是版本13.1(SQL Server 2016),而v11.0实例是版本11.0 (SQL Server 2012)。

因此,如果您要将.mdf文件附加到这两个实例中的任何一个,您只需要选择正确的,以使其能够使用您想要的版本。一旦你升级了&#34;数据库文件到较新版本的SQL Server(如2016 - 内部数据库版本852),您可以从不返回 - 没有办法分离/附加,备份/恢复或其他将这些二进制文件转换为旧版SQL Server的方法。您必须将较新数据库文件的结构(可能还有数据)编写为.sql个文件,然后运行旧版本的文件。

答案 1 :(得分:3)

版本852是SQL Server 2016,版本782是SQL Server 2014.可以找到版本的良好参考at this Microsoft page

根据您的解释,这应该是782版本的数据库。由于它是版本852 DB,这意味着它是使用SQL Server 2016而不是SQL Server 2014升级的。因此,您应该检查在本地/ dev机器上运行的所有SQL Server版本,以确认只有SQL Server 2014是在使用中,而不是(可能)由VS 2017安装的SQL Server 2016。

此外,听起来最终用户的版本是2014年,而不是2016年。如果当前数据库是SQL Server 2014模式数据库,这可能是一个问题。在连接数据库之前尝试显式连接到TempDB。 (注意:这是我遇到2014/2016不兼容时必须要做的事情,但我不记得实际问题是什么。)

答案 2 :(得分:1)

如果您希望项目生成可以在客户端计算机上附加的SQL Server 2014数据库,则必须在计算机上创建服务器实例。为此,请以管理员模式打开命令行,然后输入命令“ sqllocaldb create v12.0 12.0 ”。这将在12.0版SQL Server 2014中创建一个名为“v12.0”的服务器实例。

如果服务器尚未启动,则必须使用命令“ sqllocaldb start v12.0 ”启动服务器。

现在你必须改变你的conectionString:

<connectionStrings>
    <add name="con" 
         connectionString="Data Source=(LocalDB)\v12.0;AttachDbFilename=|DataDirectory|\binaaelmamorra.mdf;Integrated Security=True;Connect Timeout=30"/>
</connectionStrings>

也许您已将一些参数添加到app.config

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

答案 3 :(得分:1)

这对我有用:

  1. 打开命令提示符,然后键入:

    cd "C:\Program Files\Microsoft SQL Server\130\LocalDB\Binn"

  2. 在cmd中编写此命令以删除本地数据库:

    SqlLocalDB.exe delete "MSSQLLocalDB"

(或SqlLocalDB.exe stop "MSSQLLocalDB",如果您仍然收到实例运行错误)

3然后编写此命令以创建新的本地db更新实例:

SqlLocalDB.exe create "MSSQLLocalDB"

参考: https://www.youtube.com/watch?v=bCjc9Mmx-bM

答案 4 :(得分:0)

就我而言,我曾经使用Visual Studio的最新版本使用实体框架代码优先技术来更新数据库,然后尝试使用较旧的版本运行该项目,并显示了此异常。 我通过删除数据库并重新运行命令Update-Database -verbose来修复它-verbose标志是这样,您可以查看执行了哪些命令。