none
SQLserverの接続の方法を教えてください。 RRS feed

  • 質問

  • SQLserver に WEBというデータベースを作成し、その中に
    WEB1テーブルを作成しました。

    Visual Basic 2010 Express のDataGridView にそのテーブルを接続して
    表示させたいのですがその接続方法がわからず、教えてください。

    DataGridViewタスクのデータソースの選択 → プロジェクトデータソースの追加
    →データベース → データセット →
    データソースの変更(Microsoft SQL Server データベースファイル)
    データベースファイル名 C¥ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\Date\WEB.mdf を指定しようとしたら

    WEB.mdf
    このファイルを開くアクセス許可がありません。
    アクセス許可の取得については、ファイルの所有者または管理者に連絡してください
    というエラーが表示されてしまいます。

    どのようにしたら
    接続できるでしょうか?
    よろしくお願いいたします。

    2011年8月8日 1:18

回答

  • > C¥ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\Date\WEB.mdf

    SQL Server Management Studio で、ウィザードを使ってデフォルト設
    定のままデータベースを作成すると、Instid\MSSQL\data フォルダに
    mdf ファイルが作成され、アタッチ済みの状態になるはずですが、そ
    うやって作りましたか?
     
    そうすると、DB を利用するためには、既定のインスタンスへの接続が
    必要となります。アタッチされた DB に対して、ユーザーインスタンス
    を利用した接続はできません。

    ところが、VB 2010 Exress Edition をアタッチ済みの既定のインスタン
    スに接続することはできません。

    > データソースの変更(Microsoft SQL Server データベースファイル)

    そのオプションで接続しようとすると、自動生成される接続文字列は以
    下のように、ユーザーインスタンスを利用するようになるはずです。

    Data Source=.\SQLEXPRESS;
    AttachDbFilename=|DataDirectory|\<mdf ファイル名>;
    Integrated Security=True;
    Connect Timeout=30;
    User Instance=True

    WEB.mdf をデタッチして、そのコピーをどこかプログラムがアクセス可能
    なフォルダにおいて、ユーザーインスタンスを利用した接続を行えば解決
    すると思います。

     

     

    • 回答としてマーク komi1 2011年8月9日 1:36
    2011年8月8日 12:52

すべての返信

  • Visual Basic 2010 Expressを実行しているユーザーが、WEB.mdfにアクセスする権利が単に無いのだと思います。WEB.mdfのアクセス許可を確認してみて下さい。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年8月8日 2:24
    モデレータ
  • すみません。アクセス許可する方法がわかりません。 アクセス許可ですがSQLServer のセキュリティ(ログイン)をどうにかするのでしょうか? セキュリティには下記の名前がありました。 どのようにしたらいいのでしょうか?  ##MS_PolicyEventProcessingLogin##  ##MS_PolicyTsqlExecutionLogin##  BUILTIN\Administrators  BUILTIN\Users  マシン名\Owner  NT AUTHORITY\SYSTEM  sa
    2011年8月8日 3:55
  • SQL Serverの問題ではなく、単純にファイルアクセスの問題だと思います。WEB.mdfを右クリックしてプロパティからセキュリティでアクセス許可を確認してみて下さい。
    また、以下のような情報がありました。mdfファイルがProgram Files配下にあるとダメなようです。お使いのOSは何でしょうか?

    How to Grant Permission to VS2010 Express to open SQL Server .mdf file?
    http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/69dde66b-de75-4429-b18b-acb40341d072

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年8月8日 4:31
    モデレータ
  • ちょっと確認ですが、SQL Serverは何をお使いでしょうか? Visual Basicのバージョンは 2010 Express なのに、SQL Serverのバージョンは 2005 のように見えます。なぜそのような組み合わせになるのか不思議です。
    2011年8月8日 4:58
  • 最初、VisualBasic 2008 Express を使っていたのですが
    途中から2010に変えたのでこうなったのだと思います。
    OSはWindows7を使っています。

    WEB.mdfを右クリックしてプロパティからセキュリティを見ると

    SYSTEM
    Owner
    Administrators

    の3個が入っています。

    2011年8月8日 7:16
  • Win7だとProgram Files以下にあるファイルの読み書きは厳しい感じになってます。
    trapemiyaさんの参考URLにあるとおりDBのファイルをProgram Files以下にあるようなので、そこから別の場所にDBのファイルを移動させてみてはどうでしょうか??

    (ちなみにVB2008Expressのときはうまくいってたんでしょうか?)


    かずき Blog:http://d.hatena.ne.jp/okazuki/ VS 2010のデザイナでBlendのBehaviorをサポートするツール公開してます。 http://vsbehaviorsupport.codeplex.com/
    • 編集済み KazukiOta 2011年8月8日 7:37 敬称忘れてた。
    2011年8月8日 7:36
  • まずは使用しているSQL Serverをきちんと答えてください。

    既にアタッチ済みとか、別インスタンスがアタッチしてるとか、いろいろな可能性が考えられますが。

    アクセス権を疑うコメントもありますが、SQL Serverからアクセスするなら(既にファイル作成が成功していることもあり)問題ないのでは、とも思います。

    2011年8月8日 8:03
  • > C¥ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\Date\WEB.mdf

    SQL Server Management Studio で、ウィザードを使ってデフォルト設
    定のままデータベースを作成すると、Instid\MSSQL\data フォルダに
    mdf ファイルが作成され、アタッチ済みの状態になるはずですが、そ
    うやって作りましたか?
     
    そうすると、DB を利用するためには、既定のインスタンスへの接続が
    必要となります。アタッチされた DB に対して、ユーザーインスタンス
    を利用した接続はできません。

    ところが、VB 2010 Exress Edition をアタッチ済みの既定のインスタン
    スに接続することはできません。

    > データソースの変更(Microsoft SQL Server データベースファイル)

    そのオプションで接続しようとすると、自動生成される接続文字列は以
    下のように、ユーザーインスタンスを利用するようになるはずです。

    Data Source=.\SQLEXPRESS;
    AttachDbFilename=|DataDirectory|\<mdf ファイル名>;
    Integrated Security=True;
    Connect Timeout=30;
    User Instance=True

    WEB.mdf をデタッチして、そのコピーをどこかプログラムがアクセス可能
    なフォルダにおいて、ユーザーインスタンスを利用した接続を行えば解決
    すると思います。

     

     

    • 回答としてマーク komi1 2011年8月9日 1:36
    2011年8月8日 12:52
  • インストールは設定を変えるような高度なことはできないので
    そのままインストールしましたが
    2008が残ったまま2010をインストールしてしまいました。
    それが問題でしょうか?


    >WEB.mdf をデタッチして、そのコピーをどこかプログラムがアクセス可能
    >なフォルダにおいて、ユーザーインスタンスを利用した接続を行えば解決
    >すると思います。

    WEB.mdfをデタッチしてみました。
    データベースをデタッチする方法
    http://technet.microsoft.com/ja-jp/library/ms191491.aspx


    その後のManagementStudioのデータベースに表示されなくなった
    C¥ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\Date\WEB.mdfを
    C¥SQL¥Date\WEB.mdfにコピーし、コピーをアタッチしました。
    データベースをタッチする方法
    http://technet.microsoft.com/ja-jp/library/ms190209.aspx

     

    これでうまく接続することができました。

    ご回答、いただけて皆様ありがとうございました。

    2011年8月9日 1:36
  • やはり「既にアタッチ済みとか」で当たりでしたか。

    ところで、ただ動けばいいのでしょうか?
    今の環境が本番環境なのか、もしくは別の環境に展開する必要があるのか、によって、今回の方法が適切かどうか変わってきます。

    2011年8月9日 1:47