none
SQL ServerにあるDBへの接続先を変更するには、どうすれば良いのでしょうか。 RRS feed

  • 質問

  • ローカルPCにVisual Studio C# & SQL Server の何れもExpress版がセットされています。
    一方、これとは別に SQL Server Standerd 版が稼働しています。

    この状態で、ローカルPCから SQL Server Manager で双方のSQL Server の DBファイル(*.mdf)に
    アタッチして、何れも問題なく操作ができます。

    ここで、ローカルPCの開発環境(Visual Studio C# Express)のデータベース エクスプローラで
    【接続の追加】画面から各データベース ファイル名をセットし、【テスト接続 】を行うと、
    リモートのSQL ServerにあるDBファイルに接続しようとした場合、次のようなエラーが示されます。

       ファイル
       “mdfファイルのフルパス”が存在するネットワークパスは、データベースファイルで
       サポートされていません。
       ファイル
       “mdfファイルのフルパス”の自動的に名前が付けられたデータベースをアタッチでき
       ませんでした。同じ名前のデータベースが既に存在するか、指定されたファイルを開け
       ないか、UNC共有に配置されています。


    接続文字列を書き換えるだけで、テストDBから本番のDBに切り替えられるものと思っていましたが、
    それ以外にも色々やらなければならない事がありそうな様子です。

    何処に問題があるのか、どの辺りを調べれば良いのか教えて頂きたく、投稿させて頂きました。
    また、勉強すべき箇所などのアドバイス頂ければ幸いです。

    諸先輩の方々、どうぞ宜しくお願い致します。

    2010年5月7日 7:42

回答

  • エラーの原因は分かりませんが・・・

    作成したアプリケーションから DB がアタッチされた既定のインスタン
    ス(または名前つきインスタンス)に接続して、DB を操作したいので
    すよね?

    そうだとすると、やっていることが違うようです。

    > ここで、ローカルPCの開発環境(Visual Studio C# Express)の
    > データベース エクスプローラで【接続の追加】画面から各デー
    > タベース ファイル名をセットし、【テスト接続 】を行うと、

    というのは、Visual Studio を DB に接続する操作で、アプリケー
    ションが接続に行っている訳ではないです。

    なお、Express Edition では「接続の追加」メニューの「データ
    ソース」で選択できるのは「Microsoft SQL Server データベース
    ファイル (SqlClient)」のみと思いますが、それからアタッチ済み
    の DB に接続するのは、できるかもしれませんが、本来のやり方で
    はないと思います。

    > 何処に問題があるのか、どの辺りを調べれば良いのか教えて頂きた
    > く、投稿させて頂きました。

    アプリ側の接続文字列などの変更も必要ですが、SQL Server 側の認
    証/承認の設定も必要なはずです。

    2010年5月7日 14:31
  • 何処に問題があるのか、どの辺りを調べれば良いのか教えて頂きたく、投稿させて頂きました。
    また、勉強すべき箇所などのアドバイス頂ければ幸いです。

    データベースエクスプローラはVisual Studio C# Express Editionより上のEditionに付属しているサーバーエクスプローラの機能限定版になります。データベースエクスプローラからはデータベースファイルにしか接続することができません。この動作をもう少し詳しく説明しますと、データベースエクスプローラからデータベースファイルを指定すると、それを現在ローカルで動いているデータベース(通常はSQL Server Express Edition)に自動的にアタッチして接続するという動作になります。
    つまり、リモートで現在稼働中のSQL Server Standerdには接続できないということになります。一方、サーバーエクスプローラではできます。

    したがって、Visual Studio C# Express Editionの場合は、このようにリモートで稼働中のSQL Serverにはデータベースエクスプローラで接続することができません。しかし、データベースエクスプローラが使えないだけであって、プログラムでちゃんと接続文字列を設定してあげればこのようなリモートのSQL Serverにも接続できますので、問題なくアプリケーションを開発することができます。
    また、データベースエクスプローラの代わりであれば、SQL Server Management Studio Expressを使えば良いでしょう。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/

    2010年5月7日 15:30
    モデレータ
  • *.mdf のファイルの形で持ち歩けるパターンへの対応に限られるとの理解で
    宜しいでしょうか。  

    はい。*.mdfというデータベースファイルを、ローカルで動いているデータベースにアタッチして使用することになります。一般的にはSQL Server Express Editionのユーザーインスタンスとしてアタッチされます。

    サーバーエクスプローラーが用意されているエディションを調べたところ、
    Professional版以上になりますが、これを用意すれば、現在DBファイルで
    行っているのと同じような感覚で、リモートのSQL Server を扱う事ができる
    のでしょうか。

     できます。

    以前、教えて頂いたプロジェクトのプロパティーの設定にある「接続文字列」
    を編集すれば可能と言う事ですか。
    先に、DBファイルのパスを修正してみたのですが、旨くいかなかったようです。
    後で考えてみて、リモートSQL Serverにある *.mdfにパスを通してもサーバの
    動きを考えれば旨く行かなくて当たり前・・・ と思ったんですが、
    「・・・プログラムでちゃんと接続文字列を設定してあげれば・・・」とは、
    私の試みた方法とは別物なのでしょうね。何かヒントを頂ければ嬉しいです。

     たぶん接続文字列が誤っているのではないかと思います。以下のような感じになります。

    Data Source=<サーバー名>;Initial Catalog=<データベース名>;Integrated Security=True

    名前付きインスタンスの場合は、<サーバー名>ではなく、<サーバー名\インスタンス名>にして下さい。
    Microsoft SQL Server 2008 Management Studio Expressを利用してリモートのデータベースに接続した際に自動作成される接続文字列を参考にすることもできます。

    >また、データベースエクスプローラの代わりであれば、SQL Server
    >Management Studio Expressを使えば良いでしょう。

    宜しければ、もう少し具体的に教えて頂けると有り難いです。

    以下からMicrosoft SQL Server 2008 Management Studio Expressがダウンロードできます。こちらでリモートのデータベースに接続し、管理することができます。
    データベースエクスプローラはデータベースの管理ツールみたいなものですから、代わりにMicrosoft SQL Server 2008 Management Studio Expressを使えば良いわけです。
    既にお気づきかと思いますが、データベースエクスプローラやサーバーエクスプローラでデータベースに接続することは、開発するアプリケーションがデータベースに接続することと全く無関係です。
    データベースエクスプローラやサーバーエクスプローラは、データベースの簡易的な管理ツールとお考えください。

    MicrosoftR SQL Server 2008 Management Studio Express
    http://www.microsoft.com/downloads/details.aspx?FamilyID=08e52ac2-1d62-45f6-9a4a-4b76a8564a2b&displaylang=ja


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年5月8日 7:33
    モデレータ
  • > としますと、開発環境が接続しているDBへの接続情報が、ビルドした
    > 段階でアプリケーションに引き継がれる(埋め込まれる)と理解すれば
    > 良いのでしょうか。

    違います。

    「ビルドした段階」ではなくて、その前の、コードを作成していく段階で
    す。

    なお、その段階はあくまで開発環境でアプリから DB に接続するための接続
    文字列に過ぎません。

    しかしながら、開発環境では何ら問題なく接続できる設定になっているはず
    です。

    でも、実環境では、通常、そのままではダメで、接続文字列の変更と SQL
    Server での認証/承認の設定が必要なはずです。

    > ここで、説明にSQL Serverの場合、「・・・DBファイルをローカル
    > Microsoft SQL Serverインスタンス(Microsoft SQL Expressなど)に
    > アタッチ・・・」 と書いてあるのがポイントでしょうか。

    以前、ユーザーインスタンスへの接続と既定のインスタンスの接続の違い
    について説明したと思いますが、そのあたりを理解していただく必要があ
    ると思います。もう一度、下記のスレッドを読んで思い出してください。

    SQL Server にある DB(*.mdf)への接続ができません。
    http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/9684b4d8-d199-4ceb-9568-48b0ab2b178f

    簡単に言うと、Express Edition にある「Microsoft SQL Server データ
    ベース ファイル (SqlClient)」は、ユーザーインスタンスを利用して
    mdf ファイル(SQL Server の既定のインスタンスではなくて)に接続し
    てデータベースを扱うためのものです。

    ちなみに、「Microsoft SQL Server (SqlClient)」(Express にはあり
    ません)の方は、既存のインスタンス(または名前つきインスタンス)
    に接続して SQL Server にアタッチされたデータベースを扱うための
    ものです。

    いずれにしても、開発環境で DB の取り扱いを容易にするためのもので、
    何もしないで実環境にそのまま移行できることはない(はず)です。

    それぞれの接続文字列は以下のようになります。これを見れば違いが分か
    りますよね(分からなければ、分かるようになるまで勉強してください。
    そうでないと、掲示板では話が通じないと思います)。

    Microsoft SQL Server データベース ファイル (SqlClient)の場合:
    Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\<mdf ファイル名>;Integrated Security=True;Connect Timeout=30;User Instance=True

    Microsoft SQL Server (SqlClient)の場合:
    Data Source=.\SQLEXPRESS;Initial Catalog=<データベース名>;Integrated Security=True

    > あと、「・・本来のやり方ではない・・・」とありますが、参考書を
    > 真似て、プロジェクトに新しい項目(LINQ to SQL)を追加し先のDBの
    > テーブルを引き込んでいるのですが、根本的な間違いを犯しているので
    > しょうか。

    根本的に理解されてないと思います。SQL Server にアタッチされた DB
    に対して、ユーザーインスタンスを利用して接続に行くなどということ
    はありえません。

    > 一応見かけ上はやりたい事ができているのですが、心配に なってき
    > ました。

    開発環境でローカルでやっているから問題ないのではないですか? 自
    分の PC では自分が管理者の特権を持った Administrator としてアプリ
    を実行しているから、ローカルにインストールされた SQL Server に対
    しても管理者の特権でやりたいことできるのではないですか?

    > 認証に付きましては、Windows認証を使っています。

    それがどういうことか理解されているでしょうか? AD 環境なんです
    か?

    2010年5月8日 12:27
  • > 1.接続するパターンには、【データベース・ファイルに接続】
    >     と【リモートの SQL Server上で稼働するDBに接続】の二通
    >     りある。

    細かいことを言うようですが、前者は【ユーザーインスタンスに接
    続】、後者は【既定のインスタンス(または名前つきインスタンス)
    に接続】が正しい言い方だと思います。

    > 2.Visual Studio開発環境をDBに接続するのと、アプリケーシ
    >     ョンからの接続は、別物である。

    「Visual Studio開発環境」というのはデータベース・エクスプロ
    ーラのことですよね? そうであれば、アプリからの接続とは違う
    のは確かです。

    ただし、開発環境でアプリを走らせている場合は、アプリから接続
    に行っています(別物ではありません)。

    > 3.Express版に付属の  ・・・中略・・・
    >     しかし、Visual Studio Express版でも接続文字を正しく設定
    >     すれば、リモートSQL Serverに接続するアプリを作る事も可
    >     能である。

    上記の意味が、VC# Express のデータベース・エクスプローラから
    は既定のインスタンスには接続できないが、VC# Express で開発し
    ているアプリからはリモート SQL Server の既定のインスタンスに
    接続して開発を進めることができるということならその通りです。

    でも、リモート SQL Server に接続して開発することに特別な理由
    がなければ、ローカルでユーザーインスタンスに接続して開発した
    方が何かと面倒がなくて良いと思いますが。

    開発環境で接続する DB と実環境で接続する DB が異なれば(普通
    違いますよね)、必ず接続文字列が異なります。だから、開発が終
    わってユーザーにリリースする前に、どのみち接続文字列を本番環
    境に合わせて変更し、本番環境での確認をしなければならないはず
    です。

    これは VC# Express 版でも VS Professional 版でも同じことです。

    SQL Server がリモートかローカルかも、アプリには関係ないこと
    です(接続文字列が違う以外は)。アプリについては接続文字列以
    外は同じです。

    Settings.settings ファイルを開くと、その中に接続文字列が設定
    されていませんか? LINQ TO SQL クラスをデザイナで作ると自動
    生成されるはずです。それを本番環境用に変更してリビルトしてや
    るだけでアプリ側の作業は済むはずです。

    >     但し、SQL Server側での認証/承認/権限の付与等の対応が必要
    >     である。

    そのとおりです。アプリが完璧に完成していても、それを使うユー
    ザーが SQL Server にログインを拒否されては何ともなりませんか
    ら。

    アプリを使うドメインユーザーが SQL Server にログインして(認
    証)、DB を操作できるよう(承認)、SQL Server 側で設定してく
    ださい。

    > 4.接続文字列に関しては、  ・・・中略・・・
    >     認証/承認の問題があるかと思われますので、まずはドメインの
    >     管理権限を持たないユーザーからのDB接続を確認する所からや
    >     り直してみたいと思っています。

    ドメインの管理者権限と SQL Server の管理者権限は違うのではない
    ですか? (ドメインの管理者でも SQL Server にログインできない
    のでは?)

    また、SQL Server をインストールしてあるサーバーはドメインに属し
    ているのでしょうか? 属していないと、Windows 認証は使えません。

    もう一つ、リモート接続する場合は、それなりの設定が SQL Server
    に必要ですし、Fire Wall の穴あけも必要です。

    上記の点に問題なければ、SQL Server でドメインユーザーに権限を与
    えれば、そのユーザーはアプリを使って DB を操作できるはずです。

    > AD環境とは、ActiveDirectory環境の事でしょうか。

    そのとおりです。

    2010年5月10日 12:50
  • > 「Settings.settings ファイルを開くと、・・・」とお書きになっ
    > ているのは、プロジェクト→プロパティーの【設定】にある接続文
    > 字列と言う事でよろしいですね。

    そのとおりです。

    自分の場合は、ソリューションエクスプローラで Settings.settings
    ファイルをクリックして直接開くことが多いのでそう書きました。

    > 一応、この状態でDBのアクセスができているようですが、接続文字
    > 列の編集に関する詳細が分からないため、偶然問題が発覚していな
    > いだけなのかよく分かりません。

    接続文字列は見せていただいた内容で何ら問題ないと思います。User
    Instance はデフォルトで false なので削除してよいです。接続でき
    ているということが、接続文字列には問題ないことを証明していると
    思います。

    アプリからの DB の操作も試されて、DB に対する必要な権限も問題な
    いことはすでに確認されているようですので、SQL Server の設定もク
    リアされたのではないでしょうか。

    > 接続文字列の各項の意味合いなどを調べるためのヒントなどお教え
    > 頂ければ嬉しいです。

    MSDN ライブラリで「SqlConnection.ConnectionString プロパティ」
    をご覧になると詳しく書いてあります。以下のような資料はお持ちで
    すよね? (すでに見ておられたら失礼しました)

    MSDN Library for Visual Studio 2008 SP1 (2008年12月更新版)
    http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=7bbe5eda-5062-4ebb-83c7-d3c5ff92a373

    すみませんが、それ以上詳しい説明は、自分には無理ですのでご容赦
    ください。

    ところで、開発環境で作った DB を実環境に移すツールがあるのはご
    存知でしょうか。便利なので使ってみてください。

    SQL Database Publishing wizard is now in Visual Studio 2008.
    http://blogs.msdn.com/webdevtools/archive/2007/10/15/sql-database-publishing-wizard-is-now-in-visual-studio-orcas.aspx

    すでにご存知でしたら失礼しました。

    2010年5月12日 13:34
  • クローズされたようですが、気になったところを少し載せておきます。

    >細かいことを言うようですが、前者は【ユーザーインスタンスに接
    >続】

    その通りなのですが、若干補足しておきます。【データベース・ファイルに接続】とユーザーインスタンスは全くの別物です。【データベース・ファイルに接続】はAttachDBFileNameキーワードを使用して、データベースファイルを自動的にアタッチすることです。この時にユーザーインスタンスとしてアタッチできるのがSQL Server Express Editionです。ユーザーインスタンスを利用する場合は自動的にデタッチされますが、それ以外のEditionでは自動的にデタッチされません。

    >また、SQL Server をインストールしてあるサーバーはドメインに属し
    >ているのでしょうか? 属していないと、Windows 認証は使えません。

    必ずしもドメインに属している必要はありません。そのサーバーで同一のパスワードを持つユーザーを作成すればWindows認証で接続可能です。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年5月13日 7:42
    モデレータ
  • 井上さんがおられないところで議論しても仕方ないかもしれませんが・・・

    > 【データベース・ファイルに接続】とユーザーインスタンスは全くの別物
    > です。

    先のレスは「データベース・ファイルに接続」=「ユーザーインスタンスに
    接続」と言ってるのではなく、Visual Studio の「Microsoft SQL Server デ
    ータベースファイル (SqlClient)」=「ユーザーインスタンスに接続」とい
    う意味で言いました。

    Visual Studio を DB に接続するオプションの話から始まって、以下のような
    話の流れになっていたと思っています。(誤解があるかもしれませんが)

    Microsoft SQL Server データベース ファイル (SqlClient)
      ↓
    井上さん:【データベース・ファイルに接続】
      ↓
    小生:【ユーザーインスタンスに接続】


    Microsoft SQL Server (SqlClient)
      ↓
    井上さん:【リモートの SQL Server上で稼働するDBに接続】
      ↓
    小生:【既定のインスタンス(または名前つきインスタンス)に接続】


    > 必ずしもドメインに属している必要はありません。そのサーバーで同
    > 一のパスワードを持つユーザーを作成すればWindows認証で接続可能で
    > す。

    ドメインに属していないリモートの SQL Server にも Windows 認証で接
    続可能でしょうか? とすると、自分の無知でした。

    でも、それができるとして、運用上そのようなことをするケースがある
    のでしょうか? 開発時の試験環境に限ってもいいですが。

    AttachDBFileName で、ユーザーインスタンスを利用しないで接続すると
    いうケースも、自分には想定外でした。でも、実用上、先に述べた2つの
    方法と同等以上のメリットがあるのでしょうか?

    2010年5月13日 12:54
  • 井上さんがおられないところで議論しても仕方ないかもしれませんが・・・

     そこは残念なところかもしれませんが、後日検索してここに辿り着く人もいらっしゃると思いますので、全く無駄にはならないと思います。

    先のレスは「データベース・ファイルに接続」=「ユーザーインスタンスに
    接続」と言ってるのではなく、Visual Studio の「Microsoft SQL Server デ
    ータベースファイル (SqlClient)」=「ユーザーインスタンスに接続」とい
    う意味で言いました。

    うまく会話が噛み合っていないのかもしれませんが、「Microsoft SQL Server データベースファイル (SqlClient)」=「ユーザーインスタンスに接続」の意味だとしても、必ずしもそうだとは限りません。ユーザーインスタンスはSQL Server Express Editionのみの機能であり、SQL Serverの他のEditionに接続した場合は、ユーザーインスタンスにはならないということを言いたかったのです。AttachDBFileNameはSQL Server Express Edition以外のEditionでも使用できます。

    ドメインに属していないリモートの SQL Server にも Windows 認証で接
    続可能でしょうか? とすると、自分の無知でした。

    でも、それができるとして、運用上そのようなことをするケースがある
    のでしょうか? 開発時の試験環境に限ってもいいですが。

     Windows認証が通れば良いので、先に述べた通り、サーバー上にクライアントと同一のユーザーを同一パスワードで作成すれば接続できます。ドメイン環境が無い場合の共有フォルダの設定と同じです。このようにすれば技術的には可能ですが、現実問題としてこのような運用をするのは限定的な場合でしょう。SQL Server認証はできるだけ使うべきではないので、その理由からこのような運用になる可能性も0ではないと思います。

    AttachDBFileName で、ユーザーインスタンスを利用しないで接続すると
    いうケースも、自分には想定外でした。でも、実用上、先に述べた2つの
    方法と同等以上のメリットがあるのでしょうか?

    こちらも技術的には可能というだけで、現実問題としてユーザーインスタンスで接続しない場合は自動的にデタッチされませんから、使いにくいと思います。私も知識として持っているだけで、AttachDBFileNameでわざわざユーザーインスタンスを使わない理由を思い付きません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年5月13日 15:42
    モデレータ
  • 返答いただき有難うございました。

    > 「Microsoft SQL Server データベースファイル (SqlClient)」=「ユ
    > ーザーインスタンスに接続」の意味だとしても、必ずしもそうだとは限
    > りません。ユーザーインスタンスはSQL Server Express Editionのみの
    > 機能であり、SQL Serverの他のEditionに接続した場合は、ユーザーイ
    > ンスタンスにはならないということを言いたかったのです。

    そうですね。「Microsoft SQL Server データベースファイル (SqlClient)」
    の接続文字列の User Instance はデフォルト True になっているものの、自
    由に変更できますから。

    > Windows認証が通れば良いので、先に述べた通り、サーバー上にクライア
    > ントと同一のユーザーを同一パスワードで作成すれば接続できます。
    > ドメイン環境が無い場合の共有フォルダの設定と同じです。

    わかりました。週末に実機で勉強してみます。

    2010年5月14日 14:32

すべての返信

  • エラーの原因は分かりませんが・・・

    作成したアプリケーションから DB がアタッチされた既定のインスタン
    ス(または名前つきインスタンス)に接続して、DB を操作したいので
    すよね?

    そうだとすると、やっていることが違うようです。

    > ここで、ローカルPCの開発環境(Visual Studio C# Express)の
    > データベース エクスプローラで【接続の追加】画面から各デー
    > タベース ファイル名をセットし、【テスト接続 】を行うと、

    というのは、Visual Studio を DB に接続する操作で、アプリケー
    ションが接続に行っている訳ではないです。

    なお、Express Edition では「接続の追加」メニューの「データ
    ソース」で選択できるのは「Microsoft SQL Server データベース
    ファイル (SqlClient)」のみと思いますが、それからアタッチ済み
    の DB に接続するのは、できるかもしれませんが、本来のやり方で
    はないと思います。

    > 何処に問題があるのか、どの辺りを調べれば良いのか教えて頂きた
    > く、投稿させて頂きました。

    アプリ側の接続文字列などの変更も必要ですが、SQL Server 側の認
    証/承認の設定も必要なはずです。

    2010年5月7日 14:31
  • 何処に問題があるのか、どの辺りを調べれば良いのか教えて頂きたく、投稿させて頂きました。
    また、勉強すべき箇所などのアドバイス頂ければ幸いです。

    データベースエクスプローラはVisual Studio C# Express Editionより上のEditionに付属しているサーバーエクスプローラの機能限定版になります。データベースエクスプローラからはデータベースファイルにしか接続することができません。この動作をもう少し詳しく説明しますと、データベースエクスプローラからデータベースファイルを指定すると、それを現在ローカルで動いているデータベース(通常はSQL Server Express Edition)に自動的にアタッチして接続するという動作になります。
    つまり、リモートで現在稼働中のSQL Server Standerdには接続できないということになります。一方、サーバーエクスプローラではできます。

    したがって、Visual Studio C# Express Editionの場合は、このようにリモートで稼働中のSQL Serverにはデータベースエクスプローラで接続することができません。しかし、データベースエクスプローラが使えないだけであって、プログラムでちゃんと接続文字列を設定してあげればこのようなリモートのSQL Serverにも接続できますので、問題なくアプリケーションを開発することができます。
    また、データベースエクスプローラの代わりであれば、SQL Server Management Studio Expressを使えば良いでしょう。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/

    2010年5月7日 15:30
    モデレータ
  • SurferOnWww さん、何時も有難うございます。

    >作成したアプリケーションから DB がアタッチされた既定のインスタン
    >ス(または名前つきインスタンス)に接続して、DB を操作したいので
    >すよね?
    >
    >そうだとすると、やっていることが違うようです。

    理解が不十分なままの質問で、やっている事を正確にお伝えできなくて
    申し訳ありません。


    >というのは、Visual Studio を DB に接続する操作で、アプリケー
    >ションが接続に行っている訳ではないです。

    なるほど・・・
    としますと、開発環境が接続しているDBへの接続情報が、ビルドした
    段階でアプリケーションに引き継がれる(埋め込まれる)と理解すれば
    良いのでしょうか。


    >なお、Express Edition では「接続の追加」メニューの「データ
    >ソース」で選択できるのは「Microsoft SQL Server データベース
    >ファイル (SqlClient)」のみと思いますが、それからアタッチ済み
    >の DB に接続するのは、できるかもしれませんが、本来のやり方で
    >はないと思います。

    データソースは、
     ・Microsoft Access データベース>ファイル
     ・Microsoft SQL Server データベース>ファイル
    が選択できます。

    ここで、説明にSQL Serverの場合、「・・・DBファイルをローカル
    Microsoft SQL Serverインスタンス(Microsoft SQL Expressなど)に
    アタッチ・・・」 と書いてあるのがポイントでしょうか。

    あと、「・・本来のやり方ではない・・・」とありますが、参考書を
    真似て、プロジェクトに新しい項目(LINQ to SQL)を追加し先のDBの
    テーブルを引き込んでいるのですが、根本的な間違いを犯しているので
    しょうか。一応見かけ上はやりたい事ができているのですが、心配に
    なってきました。


    >アプリ側の接続文字列などの変更も必要ですが、SQL Server 側の認
    >証/承認の設定も必要なはずです。

    認証に付きましては、Windows認証を使っています。
    管理者権限のあるアカウントでドメインにログオンし、SQL Serverの
    セキュリティー・ログオンには、そのアカウントを加えています。
    その他にも気を付けるところがあればアドバイスをお願いします。

    質問の追い打ちになってしまいましたが、どうぞ宜しくお願します。

    2010年5月8日 5:04
  • trapemiya さん、これまでも何回かアドバイスを頂き、有難うございます。

    >データベースエクスプローラからはデータベースファイルにしか接続する
    >ことができません。

    *.mdf のファイルの形で持ち歩けるパターンへの対応に限られるとの理解で
    宜しいでしょうか。


    >つまり、リモートで現在稼働中のSQL Server Standerdには接続できないと
    >いうことになります。一方、サーバーエクスプローラではできます。

    サーバーエクスプローラーが用意されているエディションを調べたところ、
    Professional版以上になりますが、これを用意すれば、現在DBファイルで
    行っているのと同じような感覚で、リモートのSQL Server を扱う事ができる
    のでしょうか。


    >しかし、データベースエクスプローラが使えないだけであって、
    >プログラムでちゃんと接続文字列を設定してあげればこのようなリモート
    >のSQL Serverにも接続できますので、問題なくアプリケーションを開発
    >することができます。

    以前、教えて頂いたプロジェクトのプロパティーの設定にある「接続文字列」
    を編集すれば可能と言う事ですか。
    先に、DBファイルのパスを修正してみたのですが、旨くいかなかったようです。
    後で考えてみて、リモートSQL Serverにある *.mdfにパスを通してもサーバの
    動きを考えれば旨く行かなくて当たり前・・・ と思ったんですが、
    「・・・プログラムでちゃんと接続文字列を設定してあげれば・・・」とは、
    私の試みた方法とは別物なのでしょうね。何かヒントを頂ければ嬉しいです。


    >また、データベースエクスプローラの代わりであれば、SQL Server
    >Management Studio Expressを使えば良いでしょう。

    宜しければ、もう少し具体的に教えて頂けると有り難いです。

    質問攻めになってしまいましたが、現段階では何処から調べれば良いのか
    その取っ掛かりがつかめず悩んでいます。


    どうか宜しくお願いいたします。

    2010年5月8日 5:06
  • *.mdf のファイルの形で持ち歩けるパターンへの対応に限られるとの理解で
    宜しいでしょうか。  

    はい。*.mdfというデータベースファイルを、ローカルで動いているデータベースにアタッチして使用することになります。一般的にはSQL Server Express Editionのユーザーインスタンスとしてアタッチされます。

    サーバーエクスプローラーが用意されているエディションを調べたところ、
    Professional版以上になりますが、これを用意すれば、現在DBファイルで
    行っているのと同じような感覚で、リモートのSQL Server を扱う事ができる
    のでしょうか。

     できます。

    以前、教えて頂いたプロジェクトのプロパティーの設定にある「接続文字列」
    を編集すれば可能と言う事ですか。
    先に、DBファイルのパスを修正してみたのですが、旨くいかなかったようです。
    後で考えてみて、リモートSQL Serverにある *.mdfにパスを通してもサーバの
    動きを考えれば旨く行かなくて当たり前・・・ と思ったんですが、
    「・・・プログラムでちゃんと接続文字列を設定してあげれば・・・」とは、
    私の試みた方法とは別物なのでしょうね。何かヒントを頂ければ嬉しいです。

     たぶん接続文字列が誤っているのではないかと思います。以下のような感じになります。

    Data Source=<サーバー名>;Initial Catalog=<データベース名>;Integrated Security=True

    名前付きインスタンスの場合は、<サーバー名>ではなく、<サーバー名\インスタンス名>にして下さい。
    Microsoft SQL Server 2008 Management Studio Expressを利用してリモートのデータベースに接続した際に自動作成される接続文字列を参考にすることもできます。

    >また、データベースエクスプローラの代わりであれば、SQL Server
    >Management Studio Expressを使えば良いでしょう。

    宜しければ、もう少し具体的に教えて頂けると有り難いです。

    以下からMicrosoft SQL Server 2008 Management Studio Expressがダウンロードできます。こちらでリモートのデータベースに接続し、管理することができます。
    データベースエクスプローラはデータベースの管理ツールみたいなものですから、代わりにMicrosoft SQL Server 2008 Management Studio Expressを使えば良いわけです。
    既にお気づきかと思いますが、データベースエクスプローラやサーバーエクスプローラでデータベースに接続することは、開発するアプリケーションがデータベースに接続することと全く無関係です。
    データベースエクスプローラやサーバーエクスプローラは、データベースの簡易的な管理ツールとお考えください。

    MicrosoftR SQL Server 2008 Management Studio Express
    http://www.microsoft.com/downloads/details.aspx?FamilyID=08e52ac2-1d62-45f6-9a4a-4b76a8564a2b&displaylang=ja


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年5月8日 7:33
    モデレータ
  • > としますと、開発環境が接続しているDBへの接続情報が、ビルドした
    > 段階でアプリケーションに引き継がれる(埋め込まれる)と理解すれば
    > 良いのでしょうか。

    違います。

    「ビルドした段階」ではなくて、その前の、コードを作成していく段階で
    す。

    なお、その段階はあくまで開発環境でアプリから DB に接続するための接続
    文字列に過ぎません。

    しかしながら、開発環境では何ら問題なく接続できる設定になっているはず
    です。

    でも、実環境では、通常、そのままではダメで、接続文字列の変更と SQL
    Server での認証/承認の設定が必要なはずです。

    > ここで、説明にSQL Serverの場合、「・・・DBファイルをローカル
    > Microsoft SQL Serverインスタンス(Microsoft SQL Expressなど)に
    > アタッチ・・・」 と書いてあるのがポイントでしょうか。

    以前、ユーザーインスタンスへの接続と既定のインスタンスの接続の違い
    について説明したと思いますが、そのあたりを理解していただく必要があ
    ると思います。もう一度、下記のスレッドを読んで思い出してください。

    SQL Server にある DB(*.mdf)への接続ができません。
    http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/9684b4d8-d199-4ceb-9568-48b0ab2b178f

    簡単に言うと、Express Edition にある「Microsoft SQL Server データ
    ベース ファイル (SqlClient)」は、ユーザーインスタンスを利用して
    mdf ファイル(SQL Server の既定のインスタンスではなくて)に接続し
    てデータベースを扱うためのものです。

    ちなみに、「Microsoft SQL Server (SqlClient)」(Express にはあり
    ません)の方は、既存のインスタンス(または名前つきインスタンス)
    に接続して SQL Server にアタッチされたデータベースを扱うための
    ものです。

    いずれにしても、開発環境で DB の取り扱いを容易にするためのもので、
    何もしないで実環境にそのまま移行できることはない(はず)です。

    それぞれの接続文字列は以下のようになります。これを見れば違いが分か
    りますよね(分からなければ、分かるようになるまで勉強してください。
    そうでないと、掲示板では話が通じないと思います)。

    Microsoft SQL Server データベース ファイル (SqlClient)の場合:
    Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\<mdf ファイル名>;Integrated Security=True;Connect Timeout=30;User Instance=True

    Microsoft SQL Server (SqlClient)の場合:
    Data Source=.\SQLEXPRESS;Initial Catalog=<データベース名>;Integrated Security=True

    > あと、「・・本来のやり方ではない・・・」とありますが、参考書を
    > 真似て、プロジェクトに新しい項目(LINQ to SQL)を追加し先のDBの
    > テーブルを引き込んでいるのですが、根本的な間違いを犯しているので
    > しょうか。

    根本的に理解されてないと思います。SQL Server にアタッチされた DB
    に対して、ユーザーインスタンスを利用して接続に行くなどということ
    はありえません。

    > 一応見かけ上はやりたい事ができているのですが、心配に なってき
    > ました。

    開発環境でローカルでやっているから問題ないのではないですか? 自
    分の PC では自分が管理者の特権を持った Administrator としてアプリ
    を実行しているから、ローカルにインストールされた SQL Server に対
    しても管理者の特権でやりたいことできるのではないですか?

    > 認証に付きましては、Windows認証を使っています。

    それがどういうことか理解されているでしょうか? AD 環境なんです
    か?

    2010年5月8日 12:27
  • trapemiya さん、SurferOnWww さん、色々とご教授頂き、ありがとうございます。

    まず、やりたい事は作成したアプリから規定のインスタンスに接続して、DBを操作する事です。
    質問の要点が旨く表現できなくて、お手数をお掛けしています。

    さて改めて最初に立ち返り、先に(1月)教えて頂いた内容も読み直してみました。
    その時は良く理解できなかった事も再び読み返してみると、その後の色んな経験・学習と共に、
    今回お教え頂いている内容を加えて 「あぁ、そう言う事だったのか・・・」と、だいぶ理解が
    伴ってきました。(もっとも、まだまだ十分ではありませんが・・・)

    ここで、現段階で分かった(と思っている)事柄を整理し直してみます。

    1.接続するパターンには、【データベース・ファイルに接続】と【リモートの SQL Server上で
      稼働するDBに接続】の二通りある。

    2.Visual Studio開発環境をDBに接続するのと、アプリケーションからの接続は、別物である。

    3.Express版に付属のデータベース・エクスプローラはDBファイルへの接続のみ対応しており、
      規定のインスタンスに接続するには Professional版以上に用意されたサーバ・エクスプロ
      ーラが必要になる。
      しかし、Visual Studio Express版でも接続文字を正しく設定すれば、リモートSQL Server
      に接続するアプリを作る事も可能である。
      但し、SQL Server側での認証/承認/権限の付与等の対応が必要である。
      
    4.接続文字列に関しては、お示し頂いた例を参考に修正を行った所、アプリからの例外の発生
      状況から判断して、規定のインスタンスへの接続を試みているようであり、勉強の取っ掛か
      りが掴めました。
      認証/承認の問題があるかと思われますので、まずはドメインの管理権限を持たないユーザー
      からのDB接続を確認する所からやり直してみたいと思っています。

    5.以前教えて頂いた「管理者以外のユーザーのためのユーザー インスタンス」に付いては、
      難しすぎてまだ十分理解できていませんが、ユーザーインスタンスを利用してmdfファイルに
      接続するのと、規定のインスタンスに接続してSQL ServerにアタッチされたDBを扱う事の
      違いは概ね理解できました。
      
    6.認証方式については、Windows認証/SQL Server 認証があり、前者はドメインコントローラの
      ユーザーをSQL Serveに登録して(引き継いで)使用する方式で、後者はドメインに参加して
      いないユーザーのために用意され SQL Serveへ直接登録して認証する方式である、程度の
      理解に止まっています。AD環境とは、ActiveDirectory環境の事でしょうか。とすれば
      そう言う事になります。


    こんな状況になってきましたので、もう一歩踏み込んで試してみたい事柄も出てきましたので、
    更に勉強を続け、改めて疑問・質問点が出てくれば整理をして教えを請いたいと思っています。


    ここまでの段階で、誤っている箇所などありましたら指摘を頂けたらありがたいです。

    今後とも、どうぞ宜しくお願い致します。

    2010年5月10日 6:11
  • > 1.接続するパターンには、【データベース・ファイルに接続】
    >     と【リモートの SQL Server上で稼働するDBに接続】の二通
    >     りある。

    細かいことを言うようですが、前者は【ユーザーインスタンスに接
    続】、後者は【既定のインスタンス(または名前つきインスタンス)
    に接続】が正しい言い方だと思います。

    > 2.Visual Studio開発環境をDBに接続するのと、アプリケーシ
    >     ョンからの接続は、別物である。

    「Visual Studio開発環境」というのはデータベース・エクスプロ
    ーラのことですよね? そうであれば、アプリからの接続とは違う
    のは確かです。

    ただし、開発環境でアプリを走らせている場合は、アプリから接続
    に行っています(別物ではありません)。

    > 3.Express版に付属の  ・・・中略・・・
    >     しかし、Visual Studio Express版でも接続文字を正しく設定
    >     すれば、リモートSQL Serverに接続するアプリを作る事も可
    >     能である。

    上記の意味が、VC# Express のデータベース・エクスプローラから
    は既定のインスタンスには接続できないが、VC# Express で開発し
    ているアプリからはリモート SQL Server の既定のインスタンスに
    接続して開発を進めることができるということならその通りです。

    でも、リモート SQL Server に接続して開発することに特別な理由
    がなければ、ローカルでユーザーインスタンスに接続して開発した
    方が何かと面倒がなくて良いと思いますが。

    開発環境で接続する DB と実環境で接続する DB が異なれば(普通
    違いますよね)、必ず接続文字列が異なります。だから、開発が終
    わってユーザーにリリースする前に、どのみち接続文字列を本番環
    境に合わせて変更し、本番環境での確認をしなければならないはず
    です。

    これは VC# Express 版でも VS Professional 版でも同じことです。

    SQL Server がリモートかローカルかも、アプリには関係ないこと
    です(接続文字列が違う以外は)。アプリについては接続文字列以
    外は同じです。

    Settings.settings ファイルを開くと、その中に接続文字列が設定
    されていませんか? LINQ TO SQL クラスをデザイナで作ると自動
    生成されるはずです。それを本番環境用に変更してリビルトしてや
    るだけでアプリ側の作業は済むはずです。

    >     但し、SQL Server側での認証/承認/権限の付与等の対応が必要
    >     である。

    そのとおりです。アプリが完璧に完成していても、それを使うユー
    ザーが SQL Server にログインを拒否されては何ともなりませんか
    ら。

    アプリを使うドメインユーザーが SQL Server にログインして(認
    証)、DB を操作できるよう(承認)、SQL Server 側で設定してく
    ださい。

    > 4.接続文字列に関しては、  ・・・中略・・・
    >     認証/承認の問題があるかと思われますので、まずはドメインの
    >     管理権限を持たないユーザーからのDB接続を確認する所からや
    >     り直してみたいと思っています。

    ドメインの管理者権限と SQL Server の管理者権限は違うのではない
    ですか? (ドメインの管理者でも SQL Server にログインできない
    のでは?)

    また、SQL Server をインストールしてあるサーバーはドメインに属し
    ているのでしょうか? 属していないと、Windows 認証は使えません。

    もう一つ、リモート接続する場合は、それなりの設定が SQL Server
    に必要ですし、Fire Wall の穴あけも必要です。

    上記の点に問題なければ、SQL Server でドメインユーザーに権限を与
    えれば、そのユーザーはアプリを使って DB を操作できるはずです。

    > AD環境とは、ActiveDirectory環境の事でしょうか。

    そのとおりです。

    2010年5月10日 12:50
  • SurferOnWww さん、早速ご確認頂きありがとう御座います。

    正しい用語の使い方などに付いてのご指摘、ありがとうございます。
    また、文章での表現による微妙なニュアンスについても、細かく説明を加えて頂き
    私の認識に間違いが無いかを判断するのに大いに助かりました。

    仰る通り、ユーザーインスタンスに接続して開発を行い、最終段で接続文字列を
    本番環境に合わせて変更するつもりです。

    「Settings.settings ファイルを開くと、・・・」とお書きになっているのは、
    プロジェクト→プロパティーの【設定】にある接続文字列と言う事でよろしいですね。

    あと、SQL Serverの扱いについては、ドメインのユーザーアカウントをSQL Serverの
    セキュリティー→ユーザーに登録しサーバーにログインしています。
    サーバーは、ドメインに属しており、リモート接続のためのポートも開いています。
    この辺りは私のレベルに合った参考書が見つかったので、今の所なんとかやっています。


    今日 SQL Serverを使ってテストができる環境で、以下のように試してみました。

    まず、ユーザーインスタンスに接続時に自動生成されたオリジナルの接続文字列は、
    以下の通りです。

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

    よって、これを規定のインスタンスに接続するため、次のように変更してみました。

    Data Source=<サーバー名>;Initial Catalog=<データベース名>;
    Integrated Security=True;Connect Timeout=30

    User Instance=True に付いては、少なくともTrue ではないだろうし、かと言って
    false もどうかと思い、とりあえず削除しました。
    あと、規定のインスタンスを示すために何か必要かな・・と思いましたが、
    不明のため何も追加していません。

    この設定で、サーバにあるDB各テーブルの読み書きができてるのを確認できました。
    (また、何か大きな勘違いをしていないか心配ではありますが・・・)

    一応、この状態でDBのアクセスができているようですが、接続文字列の編集に関する
    詳細が分からないため、偶然問題が発覚していないだけなのかよく分かりません。

    接続文字列の各項の意味合いなどを調べるためのヒントなどお教え頂ければ嬉しいです。
    教えを請うばかりで恐縮ですが、どうか宜しくお願い致します。

     

    2010年5月12日 7:52
  • > 「Settings.settings ファイルを開くと、・・・」とお書きになっ
    > ているのは、プロジェクト→プロパティーの【設定】にある接続文
    > 字列と言う事でよろしいですね。

    そのとおりです。

    自分の場合は、ソリューションエクスプローラで Settings.settings
    ファイルをクリックして直接開くことが多いのでそう書きました。

    > 一応、この状態でDBのアクセスができているようですが、接続文字
    > 列の編集に関する詳細が分からないため、偶然問題が発覚していな
    > いだけなのかよく分かりません。

    接続文字列は見せていただいた内容で何ら問題ないと思います。User
    Instance はデフォルトで false なので削除してよいです。接続でき
    ているということが、接続文字列には問題ないことを証明していると
    思います。

    アプリからの DB の操作も試されて、DB に対する必要な権限も問題な
    いことはすでに確認されているようですので、SQL Server の設定もク
    リアされたのではないでしょうか。

    > 接続文字列の各項の意味合いなどを調べるためのヒントなどお教え
    > 頂ければ嬉しいです。

    MSDN ライブラリで「SqlConnection.ConnectionString プロパティ」
    をご覧になると詳しく書いてあります。以下のような資料はお持ちで
    すよね? (すでに見ておられたら失礼しました)

    MSDN Library for Visual Studio 2008 SP1 (2008年12月更新版)
    http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=7bbe5eda-5062-4ebb-83c7-d3c5ff92a373

    すみませんが、それ以上詳しい説明は、自分には無理ですのでご容赦
    ください。

    ところで、開発環境で作った DB を実環境に移すツールがあるのはご
    存知でしょうか。便利なので使ってみてください。

    SQL Database Publishing wizard is now in Visual Studio 2008.
    http://blogs.msdn.com/webdevtools/archive/2007/10/15/sql-database-publishing-wizard-is-now-in-visual-studio-orcas.aspx

    すでにご存知でしたら失礼しました。

    2010年5月12日 13:34
  • SurferOnWww さん、お世話になっています。

    > 自分の場合は、ソリューションエクスプローラで Settings.settings
    > ファイルをクリックして直接開くことが多いのでそう書きました。

    接続文字列が、Settings.Designer.cs に書かれているのが確かめられました。

    その他、色々と資料の在処を教えて頂き、ありがとうございます。
    web上に沢山の資料があるのは承知していますが、何分そこへたどり着く
    ための力も不足しており、教えを請うばかりです。
    また、読みこなせるようになる迄には、まだまだ時間が掛かりますが、
    まぁ、ゆっくりですが一歩一歩進みたいと思っています。

    > ところで、開発環境で作った DB を実環境に移すツールがあるのはご
    > 存知でしょうか。便利なので使ってみてください。

    これって、サーバエクスプローラーの“Publish to provider…” option.
    からの起動になるのですかね・・・

    何れにしても、基本的な事をもう少し勉強してから挑戦してみる事にします。


    皆さん、色々と有難うございました、
    これで、このスレッドは一旦クローズさせて頂きます。

    次の機会にも、どうぞよろしくお願いいたします。

    2010年5月13日 5:12
  • クローズされたようですが、気になったところを少し載せておきます。

    >細かいことを言うようですが、前者は【ユーザーインスタンスに接
    >続】

    その通りなのですが、若干補足しておきます。【データベース・ファイルに接続】とユーザーインスタンスは全くの別物です。【データベース・ファイルに接続】はAttachDBFileNameキーワードを使用して、データベースファイルを自動的にアタッチすることです。この時にユーザーインスタンスとしてアタッチできるのがSQL Server Express Editionです。ユーザーインスタンスを利用する場合は自動的にデタッチされますが、それ以外のEditionでは自動的にデタッチされません。

    >また、SQL Server をインストールしてあるサーバーはドメインに属し
    >ているのでしょうか? 属していないと、Windows 認証は使えません。

    必ずしもドメインに属している必要はありません。そのサーバーで同一のパスワードを持つユーザーを作成すればWindows認証で接続可能です。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年5月13日 7:42
    モデレータ
  • 井上さんがおられないところで議論しても仕方ないかもしれませんが・・・

    > 【データベース・ファイルに接続】とユーザーインスタンスは全くの別物
    > です。

    先のレスは「データベース・ファイルに接続」=「ユーザーインスタンスに
    接続」と言ってるのではなく、Visual Studio の「Microsoft SQL Server デ
    ータベースファイル (SqlClient)」=「ユーザーインスタンスに接続」とい
    う意味で言いました。

    Visual Studio を DB に接続するオプションの話から始まって、以下のような
    話の流れになっていたと思っています。(誤解があるかもしれませんが)

    Microsoft SQL Server データベース ファイル (SqlClient)
      ↓
    井上さん:【データベース・ファイルに接続】
      ↓
    小生:【ユーザーインスタンスに接続】


    Microsoft SQL Server (SqlClient)
      ↓
    井上さん:【リモートの SQL Server上で稼働するDBに接続】
      ↓
    小生:【既定のインスタンス(または名前つきインスタンス)に接続】


    > 必ずしもドメインに属している必要はありません。そのサーバーで同
    > 一のパスワードを持つユーザーを作成すればWindows認証で接続可能で
    > す。

    ドメインに属していないリモートの SQL Server にも Windows 認証で接
    続可能でしょうか? とすると、自分の無知でした。

    でも、それができるとして、運用上そのようなことをするケースがある
    のでしょうか? 開発時の試験環境に限ってもいいですが。

    AttachDBFileName で、ユーザーインスタンスを利用しないで接続すると
    いうケースも、自分には想定外でした。でも、実用上、先に述べた2つの
    方法と同等以上のメリットがあるのでしょうか?

    2010年5月13日 12:54
  • 井上さんがおられないところで議論しても仕方ないかもしれませんが・・・

     そこは残念なところかもしれませんが、後日検索してここに辿り着く人もいらっしゃると思いますので、全く無駄にはならないと思います。

    先のレスは「データベース・ファイルに接続」=「ユーザーインスタンスに
    接続」と言ってるのではなく、Visual Studio の「Microsoft SQL Server デ
    ータベースファイル (SqlClient)」=「ユーザーインスタンスに接続」とい
    う意味で言いました。

    うまく会話が噛み合っていないのかもしれませんが、「Microsoft SQL Server データベースファイル (SqlClient)」=「ユーザーインスタンスに接続」の意味だとしても、必ずしもそうだとは限りません。ユーザーインスタンスはSQL Server Express Editionのみの機能であり、SQL Serverの他のEditionに接続した場合は、ユーザーインスタンスにはならないということを言いたかったのです。AttachDBFileNameはSQL Server Express Edition以外のEditionでも使用できます。

    ドメインに属していないリモートの SQL Server にも Windows 認証で接
    続可能でしょうか? とすると、自分の無知でした。

    でも、それができるとして、運用上そのようなことをするケースがある
    のでしょうか? 開発時の試験環境に限ってもいいですが。

     Windows認証が通れば良いので、先に述べた通り、サーバー上にクライアントと同一のユーザーを同一パスワードで作成すれば接続できます。ドメイン環境が無い場合の共有フォルダの設定と同じです。このようにすれば技術的には可能ですが、現実問題としてこのような運用をするのは限定的な場合でしょう。SQL Server認証はできるだけ使うべきではないので、その理由からこのような運用になる可能性も0ではないと思います。

    AttachDBFileName で、ユーザーインスタンスを利用しないで接続すると
    いうケースも、自分には想定外でした。でも、実用上、先に述べた2つの
    方法と同等以上のメリットがあるのでしょうか?

    こちらも技術的には可能というだけで、現実問題としてユーザーインスタンスで接続しない場合は自動的にデタッチされませんから、使いにくいと思います。私も知識として持っているだけで、AttachDBFileNameでわざわざユーザーインスタンスを使わない理由を思い付きません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年5月13日 15:42
    モデレータ
  • 返答いただき有難うございました。

    > 「Microsoft SQL Server データベースファイル (SqlClient)」=「ユ
    > ーザーインスタンスに接続」の意味だとしても、必ずしもそうだとは限
    > りません。ユーザーインスタンスはSQL Server Express Editionのみの
    > 機能であり、SQL Serverの他のEditionに接続した場合は、ユーザーイ
    > ンスタンスにはならないということを言いたかったのです。

    そうですね。「Microsoft SQL Server データベースファイル (SqlClient)」
    の接続文字列の User Instance はデフォルト True になっているものの、自
    由に変更できますから。

    > Windows認証が通れば良いので、先に述べた通り、サーバー上にクライア
    > ントと同一のユーザーを同一パスワードで作成すれば接続できます。
    > ドメイン環境が無い場合の共有フォルダの設定と同じです。

    わかりました。週末に実機で勉強してみます。

    2010年5月14日 14:32
  • trapemiya さん、SurferOnWww さん、色々とありがとうございます

    クローズ後にtrapemiya さんから頂いた投稿を読ませて頂き、私の知識では
    微妙な違いが十分理解できず、他の資料も見ながら何度も読み返していた所
    でした。

    現状では、残念ながらお二人のやり取りも私には靄が掛かった状態です。
    しかし、前回(1月)に教えて頂いた事柄も、その時には十分理解できなかっ
    た事が、その後多少なりとも経験を積んで今回読み返すと「あぁ、そうだっ
    たのか・・」と理解できる事が少なからずありました。

    今回の件も、日を置いて改めて読ませて頂き、理解を深めようと思っています。

    色々とご教授頂いた事を感謝しております。
    どうも、有難うございました。

    これからも、よろしくお願いいたします。

    2010年5月14日 16:07