トップ回答者
ローカルのmdfファイルへの接続エラー

質問
-
いつもお世話になっております。VB2008 Express + SQL Server 2008 Expressを使って
秀和システムの書籍「Visual Basic で学ぶ ADO.NET3.5 データベースプログラミング」にて
学習しようと、15ページのデータベースファイルの作成を行いました。1.VBのデータベースエクスプローラにて「データベースへの接続をクリック」
2.接続の追加の「データソース」を「Microsoft SQL Server データベース ファイル (SqlClient)」にし、
3.データベースファイル名を入力し(今回は新規作成)
4.OKを押したところ、次のエラーが出てmdfを新規作成できません。
SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。
サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server が
リモート接続を許可するように構成されていることを確認してください。
(provider: SQL ネットワーク インターフェイス, error: 26 - 指定されたサーバーまたはインスタンスの位置を
特定しているときにエラーが発生しました)本ではこのとおり実行すれば空のmdfが作られるとありました。
なぜ、エラーになるのでしょうか?ご教示のほどよろしくお願い申し上げます<(_)>
回答
-
メッセージから判断するとSQL Server 2008 Expressがうまく動いていないような気がします。
以下のツールを使用されると、SQL Server 2008 Expressの管理を行ないやすくなります。MicrosoftR SQL ServerR 2008 Management Studio Express
http://www.google.co.jp/reader/view/#stream/user%2F00868607168373304503%2Fstate%2Fcom.google%2Freading-list
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク kei_chan_gt 2010年5月6日 3:53
-
確認ですが、VS2008の「接続の追加」ウインドウの詳細プロパティの一番下に表示されている文字列は以下の通りでしょうか?
Data Source=.\SQLEXPRESS;Integrated Security=True;Connect Timeout=30;User Instance=True
また、以下を実行してみて下さい。sqlcmd -E -S .\sqlexpress
select net_transport from sys.dm_exec_connections where session_id = @@spidおよび、
sqlcmd -E -S <コンピュータ名>\sqlexpress
select net_transport from sys.dm_exec_connections where session_id = @@spidどちらも共有メモリで繋がるのでしょうか?
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク kei_chan_gt 2010年5月6日 3:53
-
> Management Studio Express はインストールしております。
> 普通にログインできますし、SQL Serverの中のデータベースに対し
> Microsoft SQL Server (SqlClient)からの接続でしたら、
> VB2008 Expressからもアクセスできます。Visual Basic 2008 Express Edition SP1 ですか? とすると、少なくともデフ
ォルトの設定では、データソースの選択肢に「Microsoft SQL Server (SqlClient)」
はないはずですが、上記は間違いないですか? (設定の変更で可能になるとい
うことでしたら失礼しました)ひょっとして、以下のスレッドで話題になったように、Management Studio Express
でデータベースを作って、それに Visual Basic 2008 Express Edition から接続し
ようとするからうまくいかないということはないでしょうか?SQL Server にある DB(*.mdf)への接続ができません。
http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/9684b4d8-d199-4ceb-9568-48b0ab2b178f上のスレッドでも書きましたが、「Microsoft SQL Server (SqlClient)」 と「Microsoft
SQL Server データベース ファイル (SqlClient)」には以下の違いがあります。前者: SQL Server にアタッチされている DB に接続 = 既定のインスタンスに接続
後者:開発環境で Access と同様に SQL Server DB に接続 = ユーザーインスタンスに接続- 回答としてマーク kei_chan_gt 2010年5月6日 3:53
-
> SQL Server データベース ファイル (SqlClient)
というのは、Visual Studio のウィザードの選択肢の名前であって、それが意味
するところは、「ユーザーインスタンスを利用した接続の設定をする」というこ
とです。従って、例えば、
> 1
> 「SQL Server データベース ファイル (SqlClient)」として
> mdfをAccess.mdbのように扱える機能は、
> SQL Server Express版のみの機能であり、
> ほかのエディションでは出来ない。を正確に言えば、ユーザーインスタンス機能が使えるのは SQL Server 2005/2008
Express Edition のみであり、そのユーザーインスタンス機能を利用して、アプリ
ケーションから、SQL Server の mdf ファイルを Access の mdb ファイルのよう
に(即ち、SQL Server へアタッチとか認証/承認の設定なしに)扱うことができる
ということです。> 3
> VB2008 Express には「Microsoft SQL Server (SqlClient)」の
> 機能はないため、SQL Server の恩恵を受けるためには、
> 「SQL Server データベース ファイル (SqlClient)」を使用するしか
> 手段がなく、ただし「2」のルールも適用されるため、
>
> 結果VB2008 Express がSQL Server の恩恵を受けるためには、
> 「ローカルにインストールされた」「SQL Server "Express"版」に対してのみ、
> 「SQL Server データベース ファイル (SqlClient)」の機能で実現できる。
> もちろん、この機能を利用しても他PC SQL Server へのリモート接続は使用できない。「Microsoft SQL Server (SqlClient)」とは、規定のインスタンス(もしくは名
前つきインスタンス)にアタッチされた DB に接続するためのウィザードの選択
肢にすぎません。VB 2008 Express Edition には、そのウィザードがないだけで、規定のインスタ
ンス(もしくは名前つきインスタンス)にアタッチされた DB に接続することは
可能です。ただし、そうするためには、アタッチ、認証/承認の設定、それに基づく接続文字
列の設定などが必要になりますが。- 回答としてマーク kei_chan_gt 2010年5月6日 3:52
-
> と言うことは、わざわざデータベースエクスプローラに登録しなくても
> プログラムを記述すれば使用できるということなのでしょうか?できます。
ただし、SQL Server からフォルダ/ファイルに対するアクセス権の設定、
mdf ファイルのアタッチ、認証/承認の設定、接続文字列の設定など、敷
居が高くなって初心者の手には負えないと思います。> データベースエクスプローラの存在意義がわからなくなってきました??
それを言ったら、Visual Studio の存在意義も分からなくなるのでは? メ
モ帳とコマンドラインコンパイラでアプリは作れますから。何故皆さんそうしないかは分かりますよね? データベースエクスプローラ
の存在意義も同じことです。- 回答としてマーク kei_chan_gt 2010年5月6日 3:53
- 回答としてマークされていない kei_chan_gt 2010年5月6日 3:53
- 回答としてマーク kei_chan_gt 2010年5月6日 3:54
すべての返信
-
メッセージから判断するとSQL Server 2008 Expressがうまく動いていないような気がします。
以下のツールを使用されると、SQL Server 2008 Expressの管理を行ないやすくなります。MicrosoftR SQL ServerR 2008 Management Studio Express
http://www.google.co.jp/reader/view/#stream/user%2F00868607168373304503%2Fstate%2Fcom.google%2Freading-list
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク kei_chan_gt 2010年5月6日 3:53
-
trapemiyaさま
ご回答ありがとうございます。
Management Studio Express はインストールしております。
普通にログインできますし、SQL Serverの中のデータベースに対し
Microsoft SQL Server データベース ファイル (SqlClient)※ からの接続でしたら、
VB2008 Expressからもアクセスできます。が、書籍の学習用に配布されているmdf単体に対して
Microsoft SQL Server データベース ファイル (SqlClient)で
アクセスするすると、はねられてしまいますし、
空のmdfを作ろうとしても、同じくはねられてしまうのです。よし、がんばってマスターしようと書籍に取り組むも
15ページ目で早くも暗礁に乗り上げてしまい、オー・マイガッ!!(Oh My God!!)
の気分です(-_-)
※5/5 誤記訂正
Microsoft SQL Server (SqlClient)
↓
Microsoft SQL Server データベース ファイル (SqlClient)SurferOnWwwさま、ご指摘ありがとうございました<(_)>
- 編集済み kei_chan_gt 2010年5月5日 0:31 誤記訂正
-
環境は了解いたしました。SQL Server Expressは動作しているようですので、名前付きインスタンスの名前が違うのかもしれません。デフォルトではSQLEXPRESSです。
VS2008の「接続の追加」ウインドウの詳細プロパティに「Data Source」の項目があり、そこに正しくSQL Server Expressの名前付きインスタンス名が指定されていることを確認してみて下さい。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/ -
確認ですが、VS2008の「接続の追加」ウインドウの詳細プロパティの一番下に表示されている文字列は以下の通りでしょうか?
Data Source=.\SQLEXPRESS;Integrated Security=True;Connect Timeout=30;User Instance=True
また、以下を実行してみて下さい。sqlcmd -E -S .\sqlexpress
select net_transport from sys.dm_exec_connections where session_id = @@spidおよび、
sqlcmd -E -S <コンピュータ名>\sqlexpress
select net_transport from sys.dm_exec_connections where session_id = @@spidどちらも共有メモリで繋がるのでしょうか?
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク kei_chan_gt 2010年5月6日 3:53
-
> Management Studio Express はインストールしております。
> 普通にログインできますし、SQL Serverの中のデータベースに対し
> Microsoft SQL Server (SqlClient)からの接続でしたら、
> VB2008 Expressからもアクセスできます。Visual Basic 2008 Express Edition SP1 ですか? とすると、少なくともデフ
ォルトの設定では、データソースの選択肢に「Microsoft SQL Server (SqlClient)」
はないはずですが、上記は間違いないですか? (設定の変更で可能になるとい
うことでしたら失礼しました)ひょっとして、以下のスレッドで話題になったように、Management Studio Express
でデータベースを作って、それに Visual Basic 2008 Express Edition から接続し
ようとするからうまくいかないということはないでしょうか?SQL Server にある DB(*.mdf)への接続ができません。
http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/9684b4d8-d199-4ceb-9568-48b0ab2b178f上のスレッドでも書きましたが、「Microsoft SQL Server (SqlClient)」 と「Microsoft
SQL Server データベース ファイル (SqlClient)」には以下の違いがあります。前者: SQL Server にアタッチされている DB に接続 = 既定のインスタンスに接続
後者:開発環境で Access と同様に SQL Server DB に接続 = ユーザーインスタンスに接続- 回答としてマーク kei_chan_gt 2010年5月6日 3:53
-
おはようございます<(_)>
ゴールデンウィークで不在にしておりました。
回答がおくれまして申し訳ございません。trapemiyaさま
ローカルで試しますと、
sqlcmd -E -S .\sqlexpress
sqlcmd -E -S <コンピュータ名>\sqlexpressともに、Shared memory となります。
ちなみに別のPCから入力しますと、sqlcmd -E -S <コンピュータ名>\sqlexpress
で、TCPとなっております。sqlcmd -E -S .\sqlexpress はリモート接続ですので
SQLサーバーは存在しません。と怒られました。 -
SurferOnWwwさま
誤記のご指摘ありがとうございました<(_)>
早速訂正いたしました。VB2008 Express と SQL Server 2008 Express を
すべて(.NET Framework もすべて)アンインストールして
再度インストールしたところ、なんとVB2008Expressから
ローカルにmdfを作ることが出来るようになりました☆原因はイマイチよくわかりませんでしたが、
SurferOnWwwさま、trapemiyaさまのご回答は
とても参考になり、勉強になりました。教えていただいたことや、リンク先等をまとめると
1
「SQL Server データベース ファイル (SqlClient)」として
mdfをAccess.mdbのように扱える機能は、
SQL Server Express版のみの機能であり、
ほかのエディションでは出来ない。2
また「SQL Server データベース ファイル (SqlClient)」として
VBからこの機能を使うためには、SQL Server Express は
ローカルにインストールされていなければならず、別PCの
SQL Server Express に対して、この機能を使用することはできない。3
VB2008 Express には「Microsoft SQL Server (SqlClient)」の
機能はないため、SQL Server の恩恵を受けるためには、
「SQL Server データベース ファイル (SqlClient)」を使用するしか
手段がなく、ただし「2」のルールも適用されるため、結果VB2008 Express がSQL Server の恩恵を受けるためには、
「ローカルにインストールされた」「SQL Server "Express"版」に対してのみ、
「SQL Server データベース ファイル (SqlClient)」の機能で実現できる。
もちろん、この機能を利用しても他PC SQL Server へのリモート接続は使用できない。4
VB Pro以上なら「Microsoft SQL Server (SqlClient)」機能を利用して
ローカルでも別PCでも自由にアクセスできるが、たとえPro以上とて
「SQL Server データベース ファイル (SqlClient)」の機能を利用するには
「ローカルにインストールされた」「SQLServer Express版」が対象でなければならない。これで正解でしょうか?(^_^;)
-
> SQL Server データベース ファイル (SqlClient)
というのは、Visual Studio のウィザードの選択肢の名前であって、それが意味
するところは、「ユーザーインスタンスを利用した接続の設定をする」というこ
とです。従って、例えば、
> 1
> 「SQL Server データベース ファイル (SqlClient)」として
> mdfをAccess.mdbのように扱える機能は、
> SQL Server Express版のみの機能であり、
> ほかのエディションでは出来ない。を正確に言えば、ユーザーインスタンス機能が使えるのは SQL Server 2005/2008
Express Edition のみであり、そのユーザーインスタンス機能を利用して、アプリ
ケーションから、SQL Server の mdf ファイルを Access の mdb ファイルのよう
に(即ち、SQL Server へアタッチとか認証/承認の設定なしに)扱うことができる
ということです。> 3
> VB2008 Express には「Microsoft SQL Server (SqlClient)」の
> 機能はないため、SQL Server の恩恵を受けるためには、
> 「SQL Server データベース ファイル (SqlClient)」を使用するしか
> 手段がなく、ただし「2」のルールも適用されるため、
>
> 結果VB2008 Express がSQL Server の恩恵を受けるためには、
> 「ローカルにインストールされた」「SQL Server "Express"版」に対してのみ、
> 「SQL Server データベース ファイル (SqlClient)」の機能で実現できる。
> もちろん、この機能を利用しても他PC SQL Server へのリモート接続は使用できない。「Microsoft SQL Server (SqlClient)」とは、規定のインスタンス(もしくは名
前つきインスタンス)にアタッチされた DB に接続するためのウィザードの選択
肢にすぎません。VB 2008 Express Edition には、そのウィザードがないだけで、規定のインスタ
ンス(もしくは名前つきインスタンス)にアタッチされた DB に接続することは
可能です。ただし、そうするためには、アタッチ、認証/承認の設定、それに基づく接続文字
列の設定などが必要になりますが。- 回答としてマーク kei_chan_gt 2010年5月6日 3:52
-
SurferOnWwwさま
ご回答ありがとうございます。
> VB 2008 Express Edition には、そのウィザードがないだけで、
> 規定のインスタンス(もしくは名前つきインスタンス)にアタッチされた
> DB に接続することは可能です。> ただし、そうするためには、アタッチ、認証/承認の設定、それに基づく
> 接続文字列の設定などが必要になりますが。と言うことは、わざわざデータベースエクスプローラに登録しなくても
プログラムを記述すれば使用できるということなのでしょうか?データベースエクスプローラの存在意義がわからなくなってきました??
プログラムの記述と、SQL Server Management Studio Express があれば
データベースエクスプローラなんて必要ないのでは?? -
> と言うことは、わざわざデータベースエクスプローラに登録しなくても
> プログラムを記述すれば使用できるということなのでしょうか?できます。
ただし、SQL Server からフォルダ/ファイルに対するアクセス権の設定、
mdf ファイルのアタッチ、認証/承認の設定、接続文字列の設定など、敷
居が高くなって初心者の手には負えないと思います。> データベースエクスプローラの存在意義がわからなくなってきました??
それを言ったら、Visual Studio の存在意義も分からなくなるのでは? メ
モ帳とコマンドラインコンパイラでアプリは作れますから。何故皆さんそうしないかは分かりますよね? データベースエクスプローラ
の存在意義も同じことです。- 回答としてマーク kei_chan_gt 2010年5月6日 3:53
- 回答としてマークされていない kei_chan_gt 2010年5月6日 3:53
- 回答としてマーク kei_chan_gt 2010年5月6日 3:54
-
SurferOnWwwさま
ご回答ありがとうございます。
確かにおっしゃる通りです(^_^;)VBもメモ帳とコマンドラインコンパイラでアプリが
つくれるなんて知りませんでした(汗)
私には100万年かかっても無理です(笑)おかげさまで、VBおよび、SQL Server 各エディション群に対しての
mdfユーザーインスタンスのモンモンがすっきりしました。SurferOnWwwさま、trapemiyaさま
親切丁寧にご解説いただきありがとうございました。
また何かございましたら、どうかよろしくお願い申し上げます。ありがとうございましたm(_ _)m