5

このアプリケーションでは、SQL Server LocalDb 2014 をデータベース エンジンとして使用しています。使用する接続文字列は

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

現在、1 台のコンピューターだけに VS 2015SP3 と最新バージョンの SQL Server オブジェクトがインストールされており、アプリケーションは SQL Server LocalDb 2016 を使用して開始します。現在、LocalDb 2016 形式で作成されたバックアップは、LocalDb 2016 がインストールされていないコンピューターでは読み取ることができません。

問題は、使用する LocalDb のバージョンが接続文字列で指定されていないことです。LocalDb 2014 (またはアップグレードする場合は 2016?) を強制する方法があります。

4

2 に答える 2

5

"Data Source=(localdb)\mssqllocaldb"さて、Erik の回答とは別に解決策が提供されていないことを見て、接続文字列で使用するときに使用する SQL Server LocalDb のフレーバーを実際に指定できないと仮定する必要があります。

Erik のソリューションの欠点は、LocalDb の既定のインスタンス (MSSQLLocalDb) を使用する可能性のある他のアプリケーションとうまく連携できないことです。いわゆる名前付きインスタンスを使用する別のアプローチを見つけました。それは、アプリケーション専用の LocalDb のインスタンスです。名前付きインスタンスを定義する際に、使用する LocalDb のバージョンを指定できます: LocaldDb 2014 の場合は 12.0、Localdb 2016 の場合は 13.0。

名前付きインスタンスを作成するには、次の 2 つの方法があります。

  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" 
于 2016-10-15T05:59:56.347 に答える
1

sqllocaldb コマンド ライン ツールを使用してインスタンスを作成および削除できるため、次のように 2016 (バージョン 13.0) でインスタンスを削除します。

sqllocaldb delete "mssqllocaldb"

次に、次を使用して 2014 (バージョン 12.0) でそのインスタンス名を作成します。

sqllocaldb create "mssqllocaldb" 12.0

これを行うために利用できる素敵な .NET ライブラリもあります。

https://github.com/martincostello/sqllocaldb

于 2016-10-11T11:11:22.593 に答える