著作一覧 |
結構はまったのでメモ。
10G程度で済むのは間違いないので、ライセンスをけちってSQL Expressを2008R2にインストールしてDBとして使おうとした。
クライアントは.NETで作る。
SQL Management Studioも入れず、Visual Studioも入れず、サーバにSQL Express 2012を入れただけのところに、とりあえずデータベースを作成してテーブルをクリエイトしまくる、C#(本当はSQL PowerShellで良いのだが、.NET Frmaeworkは素の2.0と4.0を入れただけで、3.5を入れていなかったため、動かないのだ)のプログラムを作って、送り込み実行する。
? 接続エラーで死ぬ。
Data Source=.\SQLEXPRESS;Initial Catalog=Master;Integrated Security=True で問題ないはずだが……
と、不思議になる。SQL構成ツールで、TCP接続も有効になっているし、1344に割り当てられているのはnetstat -an -oで見えているし、はて。
結論からは、SqlClient.SqlConnectionがSQLEXPRESSに接続するにはインスタンス名の指定が不要なのだった。もともとWindows認証しかないから、余分なパラメータも不要だ。
Server=127.0.0.1;Initial Catalog=Master
何を見てもインスタンス名を指定しろと書いてあるので、なかなかたどり着けなかった。
ジェズイットを見習え |
SQL Serverのインストール時に、インスタンス名を既定のインスタンス名(MSSQLSERVER)にしていたのではないでしょうか。<br>インスタンス名はレジストリの[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL] に登録されたキー名で確認できます。
インストールしたのは僕ではないのでわからないけど(既定=SQLEXPRESSという言い方してたし)、それはありそうに思います。というよりも疑っていて、.\MSSQLSERVERも試したけど、25のエラーになって接続できなかった(これも不可解なんだけど)。キー名のレジストリ情報はすごく欲しかった! どうもありがとうございます。