Visual Studio 2017とSQL Server 2014を使用しています。データベースファイルをVisual Studioにアタッチすると、次のエラーが表示されます。
ファイルをアップグレードした後、この接続文字列を使用しました
<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ローカルDBをインストールしましたが、それを取り除くことはできません。
2番目の質問は、データベースファイルと互換性のないSQL Serverの現在のインスタンスは何ですか?
マシンにさまざまなバージョンのSQL Serverのインスタンスが複数あるようです。
「本格的な」バージョン(Express以降)の場合、SQL Server Configuration Managerを見ると、それらのバージョンを確認できます。
SQL Serverの「LocalDB」バージョン(開発者向けバージョン)の場合、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のインスタンスがtwoあることを示します-mssqllocaldb
はバージョン13.1(SQL Server 2016)ですが、 v11.0
インスタンスはバージョン11.0(SQL Server 2012)です。
したがって、.mdf
ファイルをこれらの2つのインスタンスのいずれかに添付する場合は、必要なバージョンで動作させるために正しいものを選択するだけです。また、データベースファイルを新しいバージョンのSQL Server(2016-内部DBバージョン852など)に「アップグレード」すると、[〜#〜] never [〜#〜]戻ることができます-これらのバイナリファイルを古いバージョンのSQL Serverに取得するためのデタッチ/アタッチ、バックアップ/復元、またはその他の方法はありません。新しいデータベースファイルの構造(および場合によってはデータ)を.sql
ファイルにスクリプト化して、古いバージョンで実行する必要があります。
バージョン852はSQL Server 2016、バージョン782はSQL Server 2014です。バージョンの適切なリファレンスは このMicrosoftページ にあります。
説明に基づいて、これはバージョン782 DBである必要があります。バージョン852 DBであるため、これはSQL Server 2014ではなくSQL Server 2016を使用してアップグレードされたことを意味します。したがって、ローカル/開発マシンで実行されているSQL Serverのすべてのバージョンをチェックし、SQL Server 2014のみがVS 2017によって(潜在的に)SQL Server 2016がインストールされていません。
さらに、エンドユーザーのバージョンは2016年ではなく2014年のようです。現在のDBがSQL Server 2014モードのDBである場合、これは潜在的に問題です。 DBに接続する前に、TempDBに明示的に接続してみてください。 (注:2014/2016の非互換性に遭遇したとき、これは私がしなければならなかったことですが、実際の問題が何であったか思い出せません。)
プロジェクトでクライアントマシンにアタッチできるSQL Server 2014データベースを生成する場合は、マシンにサーバーのインスタンスを作成する必要があります。これを行うには、管理者モードでコマンドラインを開き、コマンド「sqllocaldb create v12.0 12.」を入力します。これにより、SQL Server 2014バージョン12.0で「v12.0」というサーバーインスタンスが作成されます。
サーバーがまだ起動していない場合は、コマンド "sqllocaldb start v12."を使用してサーバーを起動する必要があります。
次に、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>
私の場合、最新バージョンのVisual Studioを使用してエンティティフレームワークコードファーストテクニックでデータベースを更新した後、古いバージョンでプロジェクトを実行しようとすると、この例外が示されました。データベースを削除し、コマンドUpdate-Database -verbose
-verboseフラグを再実行するだけで、実行されたコマンドを確認できます。