none
C# express でのDBについて RRS feed

  • 質問

  • お世話になります

     C#相変わらずの初心者です。

     何とかローカル環境での開発は少しはできるようになってきたのですが

     今回クラサバタイプでシステムを作りたく思っております。

     しかし、(もしかしたら当たり前なのかも知れませんが)DBをネットワーク上に作成することが

     できません。

     環境としては、WIN7Pro において C# Express で データベースエクスプローラーより

     新規接続の追加でサーバ内の特定の場所にフォルダを作りそこに作成しようとしても

     できません。。。

     無償版ではローカルアプリケーションしか開発はできないのでしょうか?

     DBをサーバ上に作成し、テーブル含めてサーバエクスプローラで作成する方法があればご教示ください。

     あまりにも、素人質問かもしれませんがご回答お願い申し上げます

     

    2012年12月13日 15:04

回答

  • ちょっと勘違いしてますね。

    データベースは、Visual Studio で作るものではありません。ネットワーク内のどこかのコンピューターにデータベースアプリケーションをインストールし、そこに対してデータベースエクスプローラなどでアクセスします。ネットワーク内のどこかのコンピューターと書きましたが Visual Studio がインストールされたコンピューターでも構いません。

    データベースアプリケーションには無償版として、マイクロソフトの SQL Server の Express 版や PostgreSQL、MySQL などがあります。用意されているドキュメントの量を考えるととりあえず勉強するには SQL Server が手っ取り早いかも知れません。

    • 回答としてマーク KOJI3D 2012年12月14日 5:28
    2012年12月13日 16:48
  • > C# Express で データベースエクスプローラーより
    > 新規接続の追加でサーバ内の特定の場所にフォルダを作り
    > そこに作成しようとしてもできません。。。

    何をしたいのかよく分かりませんが・・・

    VWD Express, VC# Express, VB Express では既定のインスタンスへの接続ができません(ユーザーインスタンスへの接続のみ可能)。

    そのあたりの問題ではないのですか?

    Visual Studio の接続
    http://surferonwww.info/BlogEngine/post/2010/09/15/Connecting-Visual-Studio-to-SQL-Server.aspx

    ユーザーインスタンス
    http://surferonwww.info/BlogEngine/post/2010/09/14/User-Instance-of-SQL-Server-Express.aspx


    • 編集済み SurferOnWww 2012年12月13日 16:51 誤字訂正
    • 回答としてマーク KOJI3D 2012年12月15日 0:48
    2012年12月13日 16:50
  • VWD Express, VC# Express, VB Express では既定のインスタンスへの接続ができません(ユーザーインスタンスへの接続のみ可能)。

    この表現が気になりました。Express版はSQL Server Expressのユーザーインスタンスのみ接続可能なのですね。その反対として挙げられている言葉「既定のインスタンスへの接続ができません」は正確ではなくSQL Serverの通常の接続方法「インスタンスへの通常の接続ができません」もしくは「ユーザーインスタンス以外には接続できません」ですね。

    # 「既定のインスタンス」とはMSSQLSERVERのことなので、じゃあSQLEXPRESSに接続できるのか?というとやはりダメでした。

    質問者さんへ:
    開発マシン上から操作しようとするからネットワーク上に配置することになるのでは。サーバー上の動作しているアプリケーションからすればローカルのデータにアクセスすることになりますよ。
    …という指摘を考えていたら質問者さんはDBどうこうよりもご自身の使われた言葉「クラサバ」を理解されていないのではという気がしてならないのですが。例えばアプリケーションのインストールという概念はわかりますか? アプリケーションは開発したマシン上でのみ動作させるのではなく、インストールしたマシン上で動作させるのですよ。

    • 回答としてマーク KOJI3D 2012年12月15日 0:48
    2012年12月13日 22:58
  • C# Express に付属するデータベースエクスプローラーでは、ローカルのデータベースしか扱えないという制限がかかっています。書かれていらっしゃいますが、有償のVisual Studioに付属するサーバーエクスプローラーではその制限がありません。
    リモートの(ネットワーク上の)データベースを作成、管理したいのであれば、SQL Server Management Studio Expressを使うのが便利です。以下からダウンロードできます。

    MicrosoftR SQL Server 2012 Express
    http://www.microsoft.com/ja-jp/download/details.aspx?id=29062

    こうやって作成したデータベース(おそらくSQL ServerのExpress版ですよね?)は、C# Express のデータベースエクスプローラからは扱えませんが、C#のコードからは問題なく扱えます。よって、C# Express と、SQL Server Management Studio Expressの両方を使って開発を進めるようにすると良いと思います。


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

    • 回答としてマーク KOJI3D 2012年12月15日 0:48
    2012年12月14日 1:06
    モデレータ
  • すでに質問者さんは去ってしまったようですが・・・


    佐祐理さん>

    > その反対として挙げられている言葉「既定のインスタンスへの接続ができませ
    > ん」は正確ではなくSQL Serverの通常の接続方法「インスタンスへの通常の接
    > 続ができません」もしくは「ユーザーインスタンス以外には接続できません」
    > ですね。

    自分としては、むしろ、佐祐理さんが言われる「インスタンスへの通常の接続ができません」の方が正確ではないと思います。インスタンスには、既定のインスタンス、名前つきインスタンス、ユーザーインスタンスがあるわけですから。

    私の先のレス「VWD Express, VC# Express, VB Express では既定のインスタンスへの接続ができません(ユーザーインスタンスへの接続のみ可能)。」は完璧とは言いませんが、少なくとも不正確なところは一つもないと思っています。

    強いて言えば「既定のインスタンスへの接続が・・・」というところを、「既定の/名前つきインスタンスへの接続が・・・」とすればより正確かも知れませんが、冗長なので「名前つきインスタンス」は持ち出さないほうが良いと思います。


    > 「既定のインスタンス」とはMSSQLSERVERのことなので、
    > じゃあSQLEXPRESSに接続できるのか?というとやはりダメでした。

    そのあたりの理解の違いが私のレスに違和感を感じる原因ではないのですか?

    SQLEXPRESS というのは Express 版の SQL Server をデフォルトでインストールした時の「名前つきインスタンス」のインスタンス名だそうです。Express 版を「既定のインスタンス」としてインストールする方法は、以下のページを参照ください。

    名前付きインスタンスの使用
    http://msdn.microsoft.com/ja-jp/library/ms165614%28v=sql.90%29.aspx

    「既定のインスタンス」のインスタンス名は MSSQLSERVER だというのは Microsoft の文書にもよく目にしますが、実験すると無名という結果になります。以下のページを見てください。

    既定のインスタンスの名前は?
    http://surferonwww.info/BlogEngine/post/2012/11/17/what-is-the-name-of-the-default-instance.aspx

    MSSQLSERVER というのは SQL Server の「既定のインスタンス」のサービス名であるのは間違いないようですが、インスタンス名であるかどうかは、個人的にかなり疑問です。

    • 回答としてマーク KOJI3D 2012年12月15日 0:48
    2012年12月14日 13:26

すべての返信

  • ちょっと勘違いしてますね。

    データベースは、Visual Studio で作るものではありません。ネットワーク内のどこかのコンピューターにデータベースアプリケーションをインストールし、そこに対してデータベースエクスプローラなどでアクセスします。ネットワーク内のどこかのコンピューターと書きましたが Visual Studio がインストールされたコンピューターでも構いません。

    データベースアプリケーションには無償版として、マイクロソフトの SQL Server の Express 版や PostgreSQL、MySQL などがあります。用意されているドキュメントの量を考えるととりあえず勉強するには SQL Server が手っ取り早いかも知れません。

    • 回答としてマーク KOJI3D 2012年12月14日 5:28
    2012年12月13日 16:48
  • > C# Express で データベースエクスプローラーより
    > 新規接続の追加でサーバ内の特定の場所にフォルダを作り
    > そこに作成しようとしてもできません。。。

    何をしたいのかよく分かりませんが・・・

    VWD Express, VC# Express, VB Express では既定のインスタンスへの接続ができません(ユーザーインスタンスへの接続のみ可能)。

    そのあたりの問題ではないのですか?

    Visual Studio の接続
    http://surferonwww.info/BlogEngine/post/2010/09/15/Connecting-Visual-Studio-to-SQL-Server.aspx

    ユーザーインスタンス
    http://surferonwww.info/BlogEngine/post/2010/09/14/User-Instance-of-SQL-Server-Express.aspx


    • 編集済み SurferOnWww 2012年12月13日 16:51 誤字訂正
    • 回答としてマーク KOJI3D 2012年12月15日 0:48
    2012年12月13日 16:50
  • VWD Express, VC# Express, VB Express では既定のインスタンスへの接続ができません(ユーザーインスタンスへの接続のみ可能)。

    この表現が気になりました。Express版はSQL Server Expressのユーザーインスタンスのみ接続可能なのですね。その反対として挙げられている言葉「既定のインスタンスへの接続ができません」は正確ではなくSQL Serverの通常の接続方法「インスタンスへの通常の接続ができません」もしくは「ユーザーインスタンス以外には接続できません」ですね。

    # 「既定のインスタンス」とはMSSQLSERVERのことなので、じゃあSQLEXPRESSに接続できるのか?というとやはりダメでした。

    質問者さんへ:
    開発マシン上から操作しようとするからネットワーク上に配置することになるのでは。サーバー上の動作しているアプリケーションからすればローカルのデータにアクセスすることになりますよ。
    …という指摘を考えていたら質問者さんはDBどうこうよりもご自身の使われた言葉「クラサバ」を理解されていないのではという気がしてならないのですが。例えばアプリケーションのインストールという概念はわかりますか? アプリケーションは開発したマシン上でのみ動作させるのではなく、インストールしたマシン上で動作させるのですよ。

    • 回答としてマーク KOJI3D 2012年12月15日 0:48
    2012年12月13日 22:58
  • C# Express に付属するデータベースエクスプローラーでは、ローカルのデータベースしか扱えないという制限がかかっています。書かれていらっしゃいますが、有償のVisual Studioに付属するサーバーエクスプローラーではその制限がありません。
    リモートの(ネットワーク上の)データベースを作成、管理したいのであれば、SQL Server Management Studio Expressを使うのが便利です。以下からダウンロードできます。

    MicrosoftR SQL Server 2012 Express
    http://www.microsoft.com/ja-jp/download/details.aspx?id=29062

    こうやって作成したデータベース(おそらくSQL ServerのExpress版ですよね?)は、C# Express のデータベースエクスプローラからは扱えませんが、C#のコードからは問題なく扱えます。よって、C# Express と、SQL Server Management Studio Expressの両方を使って開発を進めるようにすると良いと思います。


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

    • 回答としてマーク KOJI3D 2012年12月15日 0:48
    2012年12月14日 1:06
    モデレータ
  • すでに質問者さんは去ってしまったようですが・・・


    佐祐理さん>

    > その反対として挙げられている言葉「既定のインスタンスへの接続ができませ
    > ん」は正確ではなくSQL Serverの通常の接続方法「インスタンスへの通常の接
    > 続ができません」もしくは「ユーザーインスタンス以外には接続できません」
    > ですね。

    自分としては、むしろ、佐祐理さんが言われる「インスタンスへの通常の接続ができません」の方が正確ではないと思います。インスタンスには、既定のインスタンス、名前つきインスタンス、ユーザーインスタンスがあるわけですから。

    私の先のレス「VWD Express, VC# Express, VB Express では既定のインスタンスへの接続ができません(ユーザーインスタンスへの接続のみ可能)。」は完璧とは言いませんが、少なくとも不正確なところは一つもないと思っています。

    強いて言えば「既定のインスタンスへの接続が・・・」というところを、「既定の/名前つきインスタンスへの接続が・・・」とすればより正確かも知れませんが、冗長なので「名前つきインスタンス」は持ち出さないほうが良いと思います。


    > 「既定のインスタンス」とはMSSQLSERVERのことなので、
    > じゃあSQLEXPRESSに接続できるのか?というとやはりダメでした。

    そのあたりの理解の違いが私のレスに違和感を感じる原因ではないのですか?

    SQLEXPRESS というのは Express 版の SQL Server をデフォルトでインストールした時の「名前つきインスタンス」のインスタンス名だそうです。Express 版を「既定のインスタンス」としてインストールする方法は、以下のページを参照ください。

    名前付きインスタンスの使用
    http://msdn.microsoft.com/ja-jp/library/ms165614%28v=sql.90%29.aspx

    「既定のインスタンス」のインスタンス名は MSSQLSERVER だというのは Microsoft の文書にもよく目にしますが、実験すると無名という結果になります。以下のページを見てください。

    既定のインスタンスの名前は?
    http://surferonwww.info/BlogEngine/post/2012/11/17/what-is-the-name-of-the-default-instance.aspx

    MSSQLSERVER というのは SQL Server の「既定のインスタンス」のサービス名であるのは間違いないようですが、インスタンス名であるかどうかは、個人的にかなり疑問です。

    • 回答としてマーク KOJI3D 2012年12月15日 0:48
    2012年12月14日 13:26
  • SQL Server Expressは、特にVisual C# Expressと同時にインストールされる際は選択肢もなく、名前付きインスタンスになります。
    その上で、既定・名前付き・ユーザーの3つのインスタンスのうち、SurferOnWwwさんは既定とユーザーについて接続できるできないを言及し、既にインストールされている名前付きインスタンスについて言及しない。その説明の仕方に正当性を主張するのはなぜでしょうか? 冗長だから省略するというのなら、本スレッドのスコープで説明するのであれば省略されるべきは既定のインスタンスなのでは? そして3種類しかないのだから省略するほどのことではないと思います。

    逆に、内部実装がどうであれ、MSDNでもMSSQLSERVERが既定のインスタンス名として説明に使われています。私が同様に説明に使うことに何か問題があるのですか? それともMSDNのドキュメントミスを主張されているということでしょうか?

    2012年12月14日 15:00
  • 佐祐理さん>

    問題の本質を議論するのではなく、重箱の隅をつついて揚げ足を取っているような話に見えます。すでに質問者さんの問題は解決したようですし、これ以上のレスは他の方の迷惑になるので止めます。悪しからず、ご了承ください。

    2012年12月15日 0:21
  • 皆様ありがとうございます。

    いろいろ素人質問で、ご迷惑をおかけいしております。出張が入り昨夜やっとSQL Server Management をPCにインストールし、データベースを作成いたしました。別のPCでC# EXPRESSを 立ち上げ、データベースエクスプローラから、接続の追加でやろうと思いましたが、よく考えれば、データソースにSQL SERVERがEXPRESS版にはないことをおもいだし、以前このフォーラムにてご教示頂いた、WEB Developper 2010 EXPRESS を立ち上げ、こちらのデータベースエクスプローラで接続の追加->SQL SERVERを選択しました。ここでも本来は{該当PC}¥SQLEXPRESSというサーバが見えて欲しかったのですが、見つからなかったので、???と思ったのですが、いろいろ調べた結果、SQL SERVERがわの「SQL SERVER 構成マネージャ」を見たところSQL SERVER Browserが「停止」となっていることが原因であることが分かりました。ただ開始モードを切り替えることができなかったのですが、開始モードを「手動」にして切り替えることにより、無事に接続することができました。今回は、なんとか接続まではいったのですが、おそらく皆様はコードで接続されるのだと思います。ADOにてコードを書いて接続することを、改めて勉強しようと思います。

    今後共、種々アドバイスよろしくお願いいたします。

    galaco 様 SurferonWww様 佐祐理様 trapemiya様 大変ありがとうございました。

    2012年12月15日 0:47
  • 追記:

    本日 http://jeanne.wankuma.com/tips/csharp/sqlserver/open.html

    のサンプルを見つけ、C#Expressで接続文字列を自分の環境に合わせて変更してみましたところ

    見事に接続することができました!!ありがとうございます。

    まだまだ勉強することはいっぱいありますが、不明なことが出てきましたら、またお力をお貸しください。

    2012年12月15日 2:19