如何在连接字符串中指定使用 SQL Server LocalDb 2014 而不是 SQL Server LocalDb 2016?

6

我们的应用程序使用 SQL Server LocalDb 2014 作为数据库引擎。我们使用的连接字符串是

"Data Source=(localdb)\MSSQLLOCALDB;Initial Catalog=OurDatabase;MultipleActiveResultSets=True;Integrated Security=True;AttachDBFilename=|DataDirectory|OurDatabase.mdf"

现在,我们有一台电脑上安装了VS 2015SP3和最新版本的SQL Server对象,并且我们的应用程序开始使用SQL Server LocalDb 2016。这是不希望的,因为我们定期在计算机之间交换数据库文件备份,现在使用LocalDb 2016格式进行备份的备份无法在没有LocalDb 2016的计算机上阅读。

问题在于连接字符串没有指定应该使用哪个版本的LocalDb。是否有一种方法可以强制使用LocalDb 2014(或者如果我们决定升级,则使用2016)?

2个回答

6

除了Erik的答案外,没有提供其他解决方案,因此我们必须假设当使用连接字符串"Data Source=(localdb)\mssqllocaldb"时,您无法指定要使用的SQL Server LocalDb版本。

Erik解决方案的缺点是它不能与可能使用LocalDb默认实例(MSSQLLocalDb)的其他应用程序兼容。我发现另一种方法是使用所谓的命名实例:一个私有于您的应用程序的LocalDb实例。在定义命名实例时,您可以指定要使用的LocalDb版本:12.0用于LocaldDb 2014,13.0用于Localdb 2016。

创建命名实例有两种方法:

  1. 使用sqllocaldb命令行工具:

SqlLocalDB.exe create "MyNamedInstance" 12.0 -s

-s参数立即启动该实例。

  1. 在app.config中指定命名实例:

为此,请添加到<configSections>标记:

<section name="system.data.localdb"
         type="System.Data.LocalDBConfigurationSection,System.Data,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/>

接着添加一个新标签:

<system.data.localdb>
    <localdbinstances>
      <add name="MyNamedInstance" version="12.0" />
    </localdbinstances>
</system.data.localdb>

现在你可以在连接字符串中指定命名实例,例如:

"Data Source=(localdb)\mynamedinstance" 

2
您可以使用sqllocaldb命令行工具创建和删除实例,因此可以像这样删除2016年(版本13.0)上的实例:
sqllocaldb delete "mssqllocaldb"

然后使用以下命令在2014年(版本12.0)上创建该实例名称:

sqllocaldb create "mssqllocaldb" 12.0

还有一个很好的.NET库可用于完成这个任务:

https://github.com/martincostello/sqllocaldb


无论出于什么原因,您都无法将mssqllocaldb还原到先前的版本,会出现错误“本地数据库实例API方法的参数不正确”。我找到的唯一解决方法是在HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\UserInstances下编辑mssqllocaldb的注册表键,将ParentInstance设置为MSSQL12E.LOCALDB。然后在启动实例之前,转到C:\Users\you\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\mssqllocaldb并删除所有文件,并从上面的“ProjectsV12”文件夹中复制。然后启动该实例。感谢微软! - LMK

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