読者です 読者をやめる 読者になる 読者になる

clock-up-blog

go-mi-tech

Visual Studio から SQL Server LocalDB へ接続するためのアレコレ

SQL Server Visual Studio

SQL Server LocalDB へ接続する際の Data Source 文字列が分からずにハマる人はたぶん多いと思うし僕もけっこうな時間ハマったのでメモを残しておく。


LocalDB の存在確認

SQL Server ただ入れただけだと LocalDB が入っていないことがある。

Windows の「プログラムと機能」を開き、「localdb」でキーワード検索してみると良い。
まずこれが無いと話にならない。

f:id:kobake:20160727185639p:plain

無ければ LocalDB をインストールする

自分の場合はこれを使っている。

有効な LocalDB のインスタンス名を確認

ここが一番大事。
コマンドラインで sqllocaldb info を実行するとわかる。

> sqllocaldb info
MSSQLLocalDB
ProjectsV13

この環境で有効なLocalDBのインスタンス名は「MSSQLLocalDB」と「ProjectsV13」であることがわかった。

  • ※よく参考書などに書かれがちな「v11.0」というインスタンスは環境によっては存在しないことも多いので盲目的に「v11.0」を使ってはいけない。今回の環境にも「v11.0」は存在しない。しっかりと自分の環境にあるインスタンス名を把握し、それをもって接続を行うことが大事。
  • ちなみに C:\Users\{ユーザ名}\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances あたりを見ると、同名のフォルダが見つかることかと思う。(これを見なければいけないことは普通は無いと思うが一応知識としてメモ)

SQL Server Data Tools for Visual Studio の存在確認

Visual Studio から SQL Server 関連に接続するために、SQL Server Data Tools for Visual Studio というものが必要っぽい。これの存在を確認する。

Windowsの「プログラムと機能」で「sql data」とでもキーワード検索すればそれらしきものが見つかる。

f:id:kobake:20160727190720p:plain

無ければ SQL Server Data Tools for Visual Studio をインストールする

自分の場合はこれを使っている。

ちなみに VS2013 では試していないが、VS2015 では [TOOLS] - [Extensions and Updates...] の [Updates] - [Product Updates] から VS2015 用の SSDTSetup.exe が入手できた。

Visual Studio に LocalDB インスタンス名を設定しておく

Visual Studio メニューの [TOOLS] - [Options] により Options ダイアログを開き、
[Database Tools] - [Data Connections] のページにある [SQL Server Instance Name] の設定値を確認する。
f:id:kobake:20160727201009p:plain:w600

この値は "(LocalDB)\{LocalDBインスタンス名}" という構成になっているのだが、このインスタンス名部分が実際の環境のインスタンス名と一致していないとマズい。

今回の場合は「MSSQLLocalDB」と「ProjectsV13」が有効なインスタンス名であることが分かっている(上の手順で分かった情報)ので、これを "(LocalDB)\MSSQLLocalDB" に設定しなおす。
f:id:kobake:20160727201012p:plain:w600

※ちなみに空文字列でも良いっぽい。(何かしらのデフォルト値が使われるようになる)

Visual Studio 内 Server Explorer から LocalDB 接続を行う

Visual Studio 内で Server Explorer を開き、
f:id:kobake:20160727190518p:plain:w500

[Data Connections] の右クリックメニューの [Add Connections...] から Add Connections ダイアログを開き、
f:id:kobake:20160727190524p:plain:w350

Add Connection ダイアログ内で、[Data source] を "Microsoft SQL Server Database File" に変更する。

f:id:kobake:20160727191727p:plain f:id:kobake:20160727191731p:plain

f:id:kobake:20160727191958p:plain:w300

LocalDB がアタッチするファイルパスを入力する。(ファイルは存在しなくてOK。あとの操作が成功するとファイルは自動生成される)
f:id:kobake:20160727191740p:plain:w300

Advanced を押下し、Advanced Properties ダイアログを開き、[Data Source] が "(LocalDB)\{有効なLocalDBインスタンス名}" になっていることを確認。(もしくは "." でも良いみたい)
f:id:kobake:20160727192949p:plain:w300
f:id:kobake:20160727192951p:plain:w300

とりあえず内容確認できたので Add Connection ダイアログの OK を押せば接続が行われる。はず。
f:id:kobake:20160727193428p:plain:w300

Data Connections 配下に新しい接続ができればOK。
f:id:kobake:20160727193600p:plain:w400

Connection String の確認

追加された新しい接続の右クリックメニューの [Properties] により Properties ビューを表示すると、
この中で Connection String が確認できたりする。

f:id:kobake:20160727203500p:plain

この文字列はそのまま ASP.NET プロジェクトの Web.config の connectionString 等に設定できたりして便利。

今回の場合の Connection String は "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\_tmp\abc.mdf;Integrated Security=True;Connect Timeout=30" となった。

おしまい

自分の環境の LocalDB インスタンス名はちゃんと確認した上で設定を行うことが大事。

余談だがこのあたりの情報を日本語で検索してもなかなか見つからないことが多かったので、SQL Server 関連はあえて英語版を使っている。
(何か問題にハマったときにエラーメッセージを検索する人は多いと思うが、それが日本語だとなかなか正解にたどり着けなくても英語だとすぐたどり着けることがしばしばある)

ちなみに Advanced Properties ダイアログでは Connect Timeout という項目があり、これのデフォルトが 30 になっているので、DBにうまく繋がらないとエラー表示まで30秒程度待たされることがある。試行錯誤をしやすくするために自分はここは 1 にすることが多い。

});