SQL Server 2016 LocalDb连接问题

5
我创建了一个使用.mdf数据库文件(版本号13.00.4001)的应用程序。
如果我在编译它的同一台计算机上运行应用程序,一切都很正常。但是如果我尝试在安装有SQL Server LocalDb 2016的第二台计算机上运行它,它会显示找不到计算机上的SQL Server。
问题出在哪里?我无法理解为什么会出现这种情况。
如果我尝试在已安装SQL Server 2014 LocalDB和2016的PC上运行应用程序,则日志会显示:
“无法打开该文件,因为它是版本852。此服务器支持版本782及更早版本。不支持降级路径。”
我真的无法理解为什么会出现这些问题。
用于构建连接字符串的代码如下:
"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" + 
Directory.GetCurrentDirectory() + 
@"\Dati.mdf; Integrated Security=True"

不能在旧版的 SQL Server 上使用来自 SQL Server 2016 实例的数据库文件,因此您无法在 SQL Server 2014 LocalDB 中使用该.mdf 文件 - 您必须确保使用的是 2016 版本的 LocalDB(这是您正在遇到的第二个错误)。 - marc_s
我已经在这台机器上安装了2016和2014本地数据库。我还尝试过另一台只安装了2016的机器,但它无法工作。 - Mirko Fogazzi
你需要检查你的连接字符串,并确保它们指向一个有效、已安装和正在运行的 SQL Server LocalDB 实例 - 你必须确保这是 LocalDB 的 2016 版本。 - marc_s
连接字符串正确: "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" + Directory.GetCurrentDirectory() + @"\Dati.mdf; Integrated Security=True - Mirko Fogazzi
如果您安装了两个版本的SQL Server,则有两个实例,如果LocalDB与其他SQL Server DB的工作方式相同,则连接字符串需要反映这一点。我怀疑(LocalDB)可能不在您的连接字符串中。请阅读此内容并查看您的实例叫什么:https://www.davidbreyer.com/programming/2016/06/20/managing-sql-server-express-localdb-instances/. 我将在问题中添加连接字符串(请以后自己添加)。 - Nick.McDermaid
我无法解决这个问题。 我只在 SQL Server 2016 中发现了这个问题。 如果您只安装了 SQL Server 2016,则似乎您尚未安装 sql server。 在以前的版本中没有任何问题。 - Mirko Fogazzi
3个回答

3

我通过删除现有的MSSQLLocalDB实例并使用以下命令重新创建它来解决了我的问题:

sqllocaldb delete MSSQLLocalDB

然后执行以下命令:

sqllocaldb create MSSQLLocalDB

现在一切都正常了。


0

听起来你正在尝试将你的代码从一台机器移动到另一台机器,但是你没有移动你的数据库。这意味着你需要在第二台机器上创建一个新的数据库,然后获取新的连接字符串,这将在第二台机器上工作。

请点击这里了解有关创建数据库的指导,但首先要安装SQL Server Management Studio(请点击这里)。你可能想要创建某种配置文件来放置新的连接字符串。这里提供了有关该主题的指导。


我使用Visual Studio创建了数据库,当我编译它后,将完整的输出目录移动到另一台机器上。到目前为止,这一直很有效。我还有其他应用程序也运行得很好。 - Mirko Fogazzi

0

版本13.00.4001对应SQL Server 2016 Service Pack 1。当您尝试在另一台计算机上恢复/附加数据库时,请确保安装了相同的版本和相同的SP/CU。

要验证版本,您可以连接到实例并发出以下命令:

print @@version;

它将为您提供有关所讨论实例的构建、版本、SP/CU、位数等所有必要信息。


我已经在我的次要机器上安装了这个版本,但它无法连接到此实例,似乎我没有安装任何东西。 - Mirko Fogazzi
如果是LocalDB实例,您可以使用控制台工具sqllocaldb.exe列出它们并检查它们的版本。对于普通实例,您可以在SQL Server配置管理器中找到它们。 - Roger Wolf
是的,这是一个本地数据库实例。我已经尝试过使用SqlLocalDb版本,并且结果是: Microsoft SQL Server 2012(11.0.2318.0) Microsoft SQL Server 2014(12.0.2000.8) 但是,如果我进入已安装程序列表,那里有SqlLocalDb 2016,如果我尝试重新安装它,它告诉我已经安装了。 - Mirko Fogazzi
2
它返回另一行,其中Windows Api调用“RegGetValueW”返回错误代码:0。 - Mirko Fogazzi
@MirkoFogazzi 请查看 https://social.msdn.microsoft.com/Forums/sqlserver/1257bf26-6ab0-416d-bf26-34f128f42248。 - Michel de Ruiter
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接