【Web開発】Visual Studio 2012 Express for WebにWebサイトを移行するときのデータベースのアップグレード

今日は、2012年、12月、12日。論理的にこれ以上のぞろ目はないという日ではないですか。とはいえ、何も特別なこともなく、いつもどおり過ごすしかないのですが。

愛用のMacBook ProとWindows 8の環境がビシッと決まったこともあって、そろそろ開発を再開しようかな、ということになりました(Webサイトの方もずいぶんと長い間放置してしまいましたし)。Windows 8に移るにあたり、またVisual Studioが2012にバージョンアップしていたこともあって全部入れ替えたのですが、いざWebサイトを読み込ませると、こんなことを言われるのです。

Vs2012_db_upgrade_01

ちょっと調べてみましたら、Visual Studio 2012からは、従来のSQL Server Expressではなく、SQL Server LocalDBが推奨となっており、実際にインストールされるのも後者なのですね。要は、機能的には有償エディションに匹敵するExpressでは開発用には大きすぎるので、もっとコンパクトなものをということで登場したのがLocalDBのようです。

このLocalDBを使うためには、データベースをアップロードする(冒頭のダイアログボックスのとおり。実際には、「アップグレード」の間違いでしょうね)必要があるようなのですが、わざわざSQL Server Expressを入れるのも何ですし、推奨となっているLocalDBを使った方がよいと思うので、アップグレードしてしまえ、ということにしました。

冒頭のダイアログボックスによれば、データベースファイルをダブルクリックして表示される指示に従えばよいとありますが、ところがどっこい、そうは問屋が卸さないのです。

理屈的にはどうなのかわかりませんが、とにかく使えるようになったので、その手順をまとめてみました。まず、ソリューションエクスプローラーで目的のデータベースファイルをダブルクリックします(案内の通り)。

Vs2012_db_upgrade_02

すると、ファイルを開いていると表示されますが、しばらくしてエラーとなります。

Vs2012_db_upgrade_03

ここまで読むと、接続文字列を書き換えればよさそうです。上の画面でOKすると、ソリューションエクスプローラーがデータベースエクスプローラーに変わっていますので、目的の接続文字列の場所で右クリックして、コンテキストメニューから「接続の変更」を選びます。

Vs2012_db_upgrade_04

「接続の変更」ダイアログボックス内で作業します。ここでは特にいじるところはなく、右下の「詳細設定」を押します。

Vs2012_db_upgrade_05

「詳細プロパティ」のダイアログでは、「Data Source」と「User Instance」の2箇所を書き換えます。「Data Source」は「(LocalDB)\v11.0」を、「User Instance」はFalseとします。これは、データソースが変わったためであり、ユーザインスタンスでなくなったからです。

Vs2012_db_upgrade_06

OKを押して閉じますと、「接続の変更」ダイアログに戻りますので、左下の「接続のテスト」を押して、うまくつながるか確認します。

Vs2012_db_upgrade_07

うまくいったようですね。さっそく、データベースエクスプローラーでも確認してみましょう。

Vs2012_db_upgrade_08

テーブルもきちんと表示されます。これでOK、といきたいのですが、接続自体は書き換わっておらず、Web.config内の接続文字列はそのままです。ですから、接続から取得できる接続文字列で、Web.config内の設定も書き換えてしまえば、最終的な目的は達成できるはずです。

<add name=”ConnectionString” connectionString=”Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True” providerName=”System.Data.SqlClient”/>

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

なんか回りくどい気がしますが、接続文字列を自動で書き換えてくれないのだから、仕方ないですね。

コメント