Visual Studio デベロッパー センター > Visual Studio フォーラム > Visual Studio 共通 フォーラム > VSのサーバー エクスプローラでデータ接続中はデータベースにログインできない?
質問する質問する
 

回答済みVSのサーバー エクスプローラでデータ接続中はデータベースにログインできない?

  • 2009年8月30日 6:47yasheeki ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    お世話になります。

    VS2008 Pro でサーバー エクスプローラのデータ接続をすると、通常のコードからのデータベースへのログインが出来ないのでしょうか?
    サーバー エクスプローラのデータ接続の.mdfファイルのアイコンがX印になっているときは、コードでデータ接続出来るのですが、アイコンの+記号をクリックするなどでX印がなくなると、データベースへのログインができませんでしたとのエラーメッセージが表示されます。
    これは、当たり前のことなのでしょうか?
    それとも、何らかの回避方法があるのでしょうか?

    よろしくお願いします。
    • 編集済みyasheeki 2009年8月30日 6:48入力ミス
    •  

回答

  • 2009年9月20日 9:36SurferOnWww ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み

    話が発散しているようです。もう一度書きますが、そもそもの問題はタイトルにあるように、

    > VSのサーバー エクスプローラでデータ接続中はデータベースにログインできない?

    であったはずで、それに対する自分の回答は「サーバーエクスプローラで当該 mdf ファイル
    を右クリックして[切断(C)]すればアプリケーションからログインできるようになるはずです。」
    でしたが、それができないということなので、ゼロからデータベースを作って試してみてはどうか
    と提案したのです。

    いったい何が現時点の問題で、それをどのようにしたいのでしょうか?

    • 回答としてマークyasheeki 2009年9月21日 1:51
    •  

すべての返信

  • 2009年8月31日 1:45trapemiyaMVPユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    通常、VS2008でプログラム実行時に、mdbは出力ディレクトリーにコピーされます。つまり、VS2008におけるサーバーエクスプローラで表示しているmdbと、プログラム実行時に扱うmdbは別ものになります。したがって、排他は考えにくいのですが、もし、同じmdbを扱っているのであれば、どちらかが排他モードで接続しにいっているのかもしれません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
  • 2009年8月31日 14:07yasheeki ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    ご回答ありがとうございます。

    サーバーエクスプローラで表示しているmdb が有効の状態になると、データベースへのログインができませんでしたとのメッセージが表示されてしまい、それ以上先に進まなくなります。
    「このログインで要求されたデータベース "XXXXX" を開けません。ログインに失敗しました。
    ユーザー 'OXOX' はログインできませんでした。」
    と表示されるばかりです。

    排他モードを解除する方法はあるのでしょうか?
  • 2009年8月31日 14:48jzkey ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    結局、どっちなんでしょう。
    ・mdb(Access Database)?
    ・mdf(アタッチして使う、SQL Server Database)?


    jzkey
  • 2009年9月1日 4:54trapemiyaMVPユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    すみません。最初の質問にmdfと書いてありましたね。ごめんなさい。
    改めて、どのような環境なのでしょうか? mdfだと仮定すれば、ログインできないというメッセージは、mdfファイルがオフラインになっている可能性があります。オフラインでなければ、VS2008のサーバーエクスプローラーで接続していても、プログラムから接続することができません。オフラインであれば、サーバーエクスプローラでもプログラムからも接続することはできません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
  • 2009年9月6日 10:05yasheeki ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    ごめんなさい。

    mdb とmdfとを間違えて書いてしまいました。
    SQL Server のmdf です。
  • 2009年9月12日 0:54yasheeki ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    環境は、Vista、SQL Server 2005 Express with Advanced Service、Visual Studio 2008 Pro です。

    初歩的なことで、躓いています。
    mdfファイルをオンラインにする方法、オフラインにする方法が分からないのです。
    また、VS 2008 を開いたときは、サーバーエクスプローラタブのデータ接続のmdfファイルは常に×印がついています。そのアイコン脇にある+印をクリックすると、VS 2008からmdfファイルの中身を「テーブルデータの表示(S)」から見ることができます。しかし、この操作をすると、普段ADO.NET を利用して作られたプログラムからmdfファイルにアクセスしようとしても、

    このログインで要求されたデータベース "xxxxx" を開けません。ログイン
    に失敗しました。
    ユーザー 'xxxxx\xxxxx' はログインできませんでした。

    と表示されてしまいます。
    また、この状態の時にSQL Server Management Studio Express のオブジェクト エクスプローラのmdfファイルを右クリック操作によってプロパティ(R)を見ようとしても、

    要求されたダイアログを表示できません。とのメッセージで、追加情報として、

    Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。
    ファイルにアクセスできないか、メモリまたはディスク領域が不足しているのでデータベース
    'xxxxx'を開けません。詳細については、SQL Server エラーログを参照してください。
    (Microsoft SQL Server、エラー: 945)

    という表示が現れます。

    こんなことで、タイトル通りVSのサーバー エクスプローラでデータ接続中はデータベースにログインできないのでしょうかという質問をさせていただいています。
    よろしくお願いします。

    なお、この状態を回避して、もう一度VSからの接続を外す方法として、OSの再起動以外に見当たりません。

    • 編集済みyasheeki 2009年9月12日 0:55追加情報
    •  
  • 2009年9月12日 3:39SurferOnWww ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    > こんなことで、タイトル通りVSのサーバー エクスプローラでデータ接続中はデータベースにログインできな
    > いのでしょうかという質問をさせていただいています。

    今までぜんぜん気にしてませんでしたが、Web アプリケーション(注)で試してみたところ、そのようになりま
    すね。でも、不都合は感じてませんが?

    (注)bin フォルダにコピーを作ってそれを操作するのではなく、App_Data フォルダのオリジナルを直接操作
       してます

    > なお、この状態を回避して、もう一度VSからの接続を外す方法として、OSの再起動以外に見当たりません。

    サーバーエクスプローラで当該 mdf ファイルを右クリックして[切断(C)]すればアプリケーションからログイン
    できるようになるはずです。

  • 2009年9月12日 4:56yasheeki ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    ご回答ありがとうございます。

    VS2008 のサーバーエクスプローラで当該 mdf ファイルを右クリックして[切断(C)]という操作でも、アプリケーションからログインできません。

    そういうものなのか、それともVS2008 が不具合なのでしょうか?
  • 2009年9月12日 6:45SurferOnWww ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    > そういうものなのか、

    自分が試した限りではですが、「そういうもの」ではないです。先にも書きましたが、サーバー
    エクスプローラで切断すれば問題なくアプリケーションからログインできます。

    > それともVS2008 が不具合なのでしょうか?

    根拠はありませんけど、その可能性は低そうな気がします。どこか操作/設定が異なるからで
    はないかと想像しています。しかし、どこが違うのかは分かりません。もう少し詳しい情報は
    提供できないのでしょうか?

  • 2009年9月13日 5:49yasheeki ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    お返事ありがとうございます。

    Visual Studio 2008 のサーバーエクスプローラで該当mdf データベースが×印になっています。
    このとき、Microsoft SQL Server Management Studio Express で、該当のデータベースを開いて、Visual Studio 2008 のサーバーエクスプローラ上部のアイコンのデータベースをクリックします。
    すると、「接続の追加」が表示されて、データソース(S)では、Microsoft SQL Server データベース ファイルを選択し、次いで、データベース ファイル名(新規または既存)(D)の右の参照(B)のボタンをクリックします。
    これで、「SQL Server データベース ファイルの選択」でmdf データベースを選択できるようになります。
    ここで、該当mdf データベースを選択し、開くボタンをクリックすると、

    該当データベース名
    このファイルを開くアクセス許可がありません。

    アクセス許可の取得については、ファイルの所有者または管理者に連絡してください。

    という、メッセージボックスが表示されてしまいます。
    この方法ではなく、サーバー エクスプローラのデータベースツリーの中の該当データベース.mdfのプラスボタンをクリックすると、このManagement Studio Express で開いている状態では、

    ユーザーの既定データベースを開けません。ログインに失敗しました。
    ユーザー 'xxxxx'はログインできませんでした。

    という、メッセージボックスが表示されます。

    この後に、VSでの切断とは逆にManagement Studio Express の接続を切断しても、VS のサーバー エクスプローラからmdfファイルにデータ接続できず、ログインに失敗とのメッセージボックスが表示されます。

    この程度の追加情報です。他に何か伝えるべき情報があるかもしれません。
    何が手掛かりになるのか分からないものですから、直面している現象を伝えるにとどめました。

    どうぞ、よろしくお願いします。

  • 2009年9月13日 9:03SurferOnWww ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    なぜ Microsoft SQL Server Management Studio Express を操作する必要があるのですか? そもそもの
    問題はタイトルにあるように、

    > VSのサーバー エクスプローラでデータ接続中はデータベースにログインできない?

    であって、Microsoft SQL Server Management Studio Express は関係なかったはずでは? 趣味の問題
    ですか? すみませんが訳が分かりません。

  • 2009年9月14日 10:48yasheeki ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    脇道にそれてしまったようで、申し訳ありません。

    アプリの代わりに、Microsoft SQL Server Management Studio Express での現象を提示した方が分かりやすいのではないかと、勝手に解釈してしまいましたことをお詫び申し上げます。

    何か手掛かりはないかと探していくうちに、Management Stuidio に入り込んでしまいました。
    で、アプリからのログインは、やはり出来ないままです。
    設定については、どんなことを伝えたらよいのか分からないので、もしも何かありましたら、お伝えください。

    よろしくお願いします。
  • 2009年9月14日 14:43SurferOnWww ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    VS2008 Pro には Microsoft SQL Server Management Studio Express は付属してないはずですが、後からダウン
    ロードしてインストールしたのですよね? その前後で様子は変わりませんでしたか?

    Microsoft SQL Server Management Studio Express のは起動しないで、VS2008 のみを操作して、ゼロから mdf
    ファイルを作成し、サーバーエクスプローラで当該 mdf ファイルを右クリックして、コンテキストメニューの[最新の情報に
    更新(F)]で接続、[切断(C)]で切断できないでしょうか?

  • 2009年9月16日 12:19yasheeki ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    お世話になります。

    ゼロからmdf ファイルを作成しての、
    コンテキストメニューの[最新の情報に更新(F)]で接続、[切断(C)]で切断
    という操作は、出来ます。

    これは、何も問題ないようです。
    .mdf ではなくて、.dboですが、Solution1 として、サーバーエクスプローラに表示されます。

    ファイルのある場所が分からないので、実は、ちょっと不安もありまして恥ずかしいですが...。

    情報を追加させていただきます。以下。

    パソコンを再起動させて、VS2008 のサーバー エクスプローラで「データ接続」の.mdf ファイルの+マークをクリックして展開しようとしても、

    ユーザーの既定データベースを開けません。ログインに失敗しました。
    ユーザー 'xxxxx\xxxxx' はログインできませんでした。

    とのメッセージボックスが表示されるようになりました。
    今まではログイン出来ていたのですが、様子が違ってきました。

    どうしたものなのでしょうか?

    ぜひ、よろしくお願いします。
    • 編集済みyasheeki 2009年9月16日 12:53追加情報があります
    •  
  • 2009年9月16日 15:46SurferOnWww ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    そもそも一体何を作ってしているのでしょうか? Windows アプリ or Web アプリのどちらですか?

    Web アプリの場合、Web サイトプロジェクト or Web アプリケーションプロジェクトのどちらでし
    ょうか?

    > .mdf ではなくて、.dboですが、Solution1 として、サーバーエクスプローラに表示されます。

    このあたり、意味が分かりません。何か間違ったことをしているような気がします。

  • 2009年9月19日 12:32yasheeki ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    ご回答ありがとうございます。
    Windowsアプリです。Webアプリではありません。

    ゼロからmdf ファイルを作成しすると、.dboが作成されます。
    これは問題ないですよねぇ。
    Solution1 がサーバーエクスプローラに表示されますが、これも問題ないですよねぇ。

    伝えるべき点が良く分からないので、こんな報告で申し訳ありません。
  • 2009年9月20日 4:46SurferOnWww ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    > ゼロからmdf ファイルを作成しすると、.dboが作成されます。
    > これは問題ないですよねぇ。
    > Solution1 がサーバーエクスプローラに表示されますが、これも問題ないですよねぇ。

    デフォルトで作ればそのような名前にはならないはずです。以下の手順で試してみたくだ
    さい。

    (1) ソリューションエクスプローラでルートを右クリック、出てくるコンテキストメニュー
      で[追加(D)]→[新しい項目(W)]を選択。

    (2) 「新しい項目の追加」というダイアログが表示されるので、そこで[サービスのデータ
      ベース]を選んで[追加(A)]ボタンをクリックすれば、デフォルトで Database1.mdf
      という名前の mdf ファイルが作成される。

    (3) そのあとすぐに「データソース構成ウィザード」が表示されるので、[完了(f)]をク
      リックすれば、デフォルトで Database1DataSet という名前の空の DataSet が作成さ
      れる(ソリューションエクスプローラで見ると Database1DataSet.xsd という名前の
      ファイルおよびその下に .Designer.cs, .xsc, .xss というファイルが自動生成され
      ているはず)。

    (4) サーバーエクスプローラを見ると、「データ接続」の下に「Database1.mdf」という空
      の DB ができているはず。これを右クリックして[最新の情報に更新(F)]で接続、接
      続された状態で[切断(C)]で切断されるはずです。

  • 2009年9月20日 7:16yasheeki ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    SurferOnWww さん、いろいろご教授いただいて恐縮です。

    ご提示の
    (1) ソリューションエクスプローラでルートを右クリックとのことですが、
    すでに、このルート自体が分かりません。ルートらしきものが見当たらないのですが、この時点ですでに設定が違っているのでしょうか?

    しかし、ソリューションエクスプローラのプロジェクトを選択している状態で、VS のプロジェクト(P)メニューから新しい項目の追加(W) をクリックすると、
    サービス ベースのデータベースというテンプレートという項目があり、これをクリックすることによって、Database1.mdf が作成され、同様に
    Database1DataSet も作成されました。また、切断(C)での切断もできます。

    このやり方が通常の(デフォルトの)方法なのでしょうか?
    実は、私の場合、SQL Server Database Primary Data File とSQL Server Database Transaction Log File とを別のパソコンから、
    コピーしてアタッチしているので、これが「操作/設定が異なる」ということなのでしょうか?
    この方法をとっているために、DataBase1DataSet.xsd が存在していません。

    今回作成され.たmdf ファイルであれば、VSのサーバー エクスプローラでデータ接続中でもデータベースにログイン出来るはずなのでしょうか?

    質問が、長くなってしまい。申し訳ありませんがよろしくお願いします。
  • 2009年9月20日 9:36SurferOnWww ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み

    話が発散しているようです。もう一度書きますが、そもそもの問題はタイトルにあるように、

    > VSのサーバー エクスプローラでデータ接続中はデータベースにログインできない?

    であったはずで、それに対する自分の回答は「サーバーエクスプローラで当該 mdf ファイル
    を右クリックして[切断(C)]すればアプリケーションからログインできるようになるはずです。」
    でしたが、それができないということなので、ゼロからデータベースを作って試してみてはどうか
    と提案したのです。

    いったい何が現時点の問題で、それをどのようにしたいのでしょうか?

    • 回答としてマークyasheeki 2009年9月21日 1:51
    •  
  • 2009年9月21日 1:53yasheeki ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    今回教えていただいたデータベースを利用して、アプリからのログインができるかどうかを試してみます。

    ありがとうございました。
  • 2009年9月22日 5:47SurferOnWww ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     

    ちょっと遅くなりましたが、気になる点がありましたので連絡します。

    > 実は、私の場合、SQL Server Database Primary Data File とSQL Server Database Transaction Log File とを別のパソコンから、
    > コピーしてアタッチしているので、これが「操作/設定が異なる」ということなのでしょうか?

    ユーザーインスタンスを使用しているのであれば、手動で「アタッチ」する必要はありません。Visual Studio のデフォ
    ルト設定では、接続文字列の user instance は true になっているはずです。そう設定してあれば、connection.open
    の呼び出し中にユーザーインスタンスが生成され、管理者権限で DB を操作できるようになります。(Microsoft SQL
    Server Management Studio Express を操作して種々の設定を行う必要は一切ありません)

    管理者以外のユーザーのためのユーザー インスタンス
    http://msdn.microsoft.com/ja-jp/library/ms143684.aspx

    > この方法をとっているために、DataBase1DataSet.xsd が存在していません。

    .xsd ファイルの存在は今回の問題「VSのサーバー エクスプローラでデータ接続中はデータベースにログインできない?」
    とは関係ありません。先のレスの手順で (3) も書かないと混乱するかもしれないと思って書いたのですが、ちょっと紛ら
    わしいかったようです。すみません。