VisualStudioのLocalDBサンプルで問題がある場合の対処方法について (MS SQL LocalDBアップグレード問題)

先日、C#の勉強のために TECHNICAL MASTER はじめてのASP.NET Webフォームアプリ開発 C# 対応版 を購入しました。

TECHNICAL MASTER はじめてのASP.NET Webフォームアプリ開発 C# 対応版 ~ アマゾン

サンプルをダウンロードしたところDBが正しく読めないということが発生しました。そこでいろいろ試してみたところ対処方法がわかりました。

原因

私の環境では Microsoft Visual Studio Community 2017を入れていましたが、この本では2015を利用してます。

Visual Studio のMS SQL LocalDBを本では使っているのですが、Visual Studio 2017と 2015ではMS SQLの LocalDBのバージョンが異なり、残念ながら双方に互換性がないため動作しませんでした。

対処方法

Visual Studio 2017はMS SQL 2016のLocal DBが入っており Visual Studio 2015にはMS SQL 2014のLocal DBが同梱されてます。

MS SQL Express 2014をインストールし、環境を整えることで対応できるようになります。

一 Microsoft SQL Server 2014 Express ダウンロード

Download Microsoft® SQL Server® 2014 Express from Official Microsoft Download Center

ここからMicrosoft SQL Server 2014 Expressをダウンロードしてください。

Microsoft SQL Server 2014 Express 選択

LocalDBをインストールすればいいので LocalDB 32BIT\SqlLocalDB.msi とLocalDB 64BIT\SqlLocalDB.msi を選択し次へをクリックすると  SqlLocalDB.msi がダウンロードされるのでそのファイルをダブルクリックしてインストールしてください。私の環境はWindows 10 64bitですが無事にダウンロードできました。

二 LocalDBの登録と確認

実はインストールしただけでは使えません。Visual Studioからみて呼び出すための仕組みがまだそろっていないからです。登録されたLocalDBはコマンドプロンプトから sqllocaldb info を実行することで確認が可能です。

MSSQLLocalDBとProjectsV13はSQL 2016のLocal DBです。残念ながら、これだとサンプルは動作しません。

ここでインストールした2014のLocalDBを使うために登録する必要があります。

Creating SQL Server Express LocalDb v11, v12, v13, and MSSQLLocalDb Instances

この例だと、インスタンス名はv12.0になるため ProjectsV13 に合わせるために ProjectsV12 で登録しようとする場合以下のように実行します。

“C:\Program Files\Microsoft SQL Server\120\Tools\Binn\SqlLocalDB.exe” create “ProjectsV12” 12.0 -s

これで実際に追加されたことは確認できました。

 

三 Web.config の設定

Visual StudioではGUIの部分からDBインスタンスを変更できないので直接設定ファイルをいじります。Web.configの

<add name=”ConnectionString” connectionString=”Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DatabaseSample.mdf;Integrated Security=True” providerName=”System.Data.SqlClient”/>

赤の部分を(LocalDB)\ProjectsV12 に変更してください。

<add name=”ConnectionString” connectionString=”Data Source=(LocalDB)\ProjectsV12;AttachDbFilename=|DataDirectory|\DatabaseSample.mdf;Integrated Security=True” providerName=”System.Data.SqlClient”/>

これでサーバーエクスプローラーからいつでも確認できるようになります。

最後に

これからもSQL サーバーがバージョンアップしてLocalDBの互換性が保証されないことがあるかもしれません。

DBバージョンの変更はこのようにできるということが理解できました。

私も今回ググってようやくわかったのですが、昔からされている方たちには常識だからなかなか情報がでてこなかったのかもと思います。

参考にしていただければと思います。