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

时间:2016-10-11 09:21:56

标签: sql-server localdb sql-server-2014-localdb sql-server-2016-localdb

我们的应用程序使用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 个答案:

答案 0 :(得分:5)

嗯,除了Erik的答案之外没有提供解决方案,我们必须假设在连接字符串中使用"Data Source=(localdb)\mssqllocaldb"时,确实无法指定希望使用哪种SQL Server LocalDb风格

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

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

  1. 使用sqllocaldb命令行工具:
  2. SqlLocalDB.exe create "MyNamedInstance" 12.0 -s

    -s参数立即启动实例。

    1. 在app.config中指定命名实例:
    2. 为此添加<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" 
      

答案 1 :(得分:1)

您可以使用sqllocaldb命令行工具创建和删除实例,因此请删除2016年(版本13.0)上的实例,如下所示:

sqllocaldb delete "mssqllocaldb"

然后使用:

在2104(版本12.0)上创建该实例名称
sqllocaldb create "mssqllocaldb" 12.0

还有一个很好的.NET库可用于执行此操作:

https://github.com/martincostello/sqllocaldb