none
<ConnectionString> 要素の、EXE, DLLによるふるまいの違い RRS feed

  • 質問

  • SQL Server(2005 Express)上に「UserDB1」「UserDB2」と2つのデータベースがあり、

    それぞれのデータベースに同名のテーブル「Table_1」が存在しています。

     

    Windowsアプリケーション(A.EXE)で、UserDB1..Table_1の内容をDataGridViewに

    表示する単純なプログラムを作成。

     

    A.EXEと同フォルダに「A.EXE.config」があり、次の様な内容です。

        <connectionStrings>
            <add name="A.Properties.Settings.UserDB1ConnectionString"
                connectionString="Data Source=PC1\SQLEXPRESS;Initial Catalog=UserDB1;Integrated Security=True"
                providerName="System.Data.SqlClient" />
        </connectionStrings>

    ここで、A.EXE起動前に「Initial Catalog」の内容を「UserDB1」または「UserDB2」とテキストエディタ等で

    書き換えると、A.EXEは書き換えた通りのデータベース上のTable_1の内容を表示します。

     

    ここまでは、狙った通りの動作なのですが、DLL(クラスライブラリ)を使用すると動作がよく

    分らなくなります。

     

    同じくWindowsアプリケーション(B.EXE)は、クラスライブラリ(C.DLL)を参照しています。

    このクラスは、「ShowForm()」メソッドを実装しており、このメソッドにより、Windowsフォームを

    開き、A.EXEと同様、UserDB1..Table_1の内容をDataGridViewに表示します。

    C.DLL、C.DLL.configはB.EXEと同一フォルダに配置。

    A.EXE(A.EXE.config)と同じ動作になると思い、C.DLL.config内の「Initial Catalog」を「UserDB1」

    「UserDB2」と書き換えても、一向に書き換えた内容は反映されず、C.DLLをコンパイル時(フォーム

    デザイン時)に表示したデータベースの内容(つまり、「UserDB1」)が表示されるばかりです。

     

    こういうものなのでしょうか?

    クラスライブラリ(DLL)は、どこの構成ファイルを参照するのでしょうか?

     

    C.DLL.configの内容

        <connectionStrings>
            <add name="C.Properties.Settings.UserDB1ConnectionString"
                connectionString="Data Source=YOSVI\SQLEXPRESS;Initial Catalog=UserDB1;Integrated Security=True"
                providerName="System.Data.SqlClient" />
        </connectionStrings>

     

     私の単純な思い違い(勘違い)なのかもしれませんが、皆様、ご教授願えませんでしょうか。

    宜しくお願いします。

     

    2007年6月13日 7:13

すべての返信

  • 環境を書き忘れました。

     

    Windows Vista Ultimate

    Visual Studio 2005 Professional Edition SP1

    SQL Server 2005 Express Edition SP2

     

    2007年6月13日 7:20
  • DLL それぞれに構成ファイルというのは作れなくて、常に app.exe.config(ASP.NET の場合は web.config)しか参照できません。
    2007年6月14日 0:45
  • なるほど。

     

    B.EXE.configファイル内に

     

      <connectionStrings>
            <add name="C.Properties.Settings.UserDB1ConnectionString"
                connectionString="Data Source=YOSVI\SQLEXPRESS;Initial Catalog=UserDB1;Integrated Security=True"
                providerName="System.Data.SqlClient" />
        </connectionStrings>

     

    を記述したらデータベースの切り替えができる様になりました。

     

    ただ、ここで新たな問題が発生するんですが、

    <add name>で指定されるnameが、

     

    [クラスライブラリ名].Properties.Settings.[データソース構成ウィザード内で指定した名前]

     

    になってしまいます。

    例え、データソース構成ウィザード内で指定した名前を統一しても、nameの先頭に

    クラスライブラリ名があると、別物になってしまいます。

    つまり、参照するDLLが増える度に<connectionStrings>を追加していかなければ

    ならいのでしょうか?

     

    TableAdapterが参照する、<connectionStrings>ってどうやって制御するんでしょうか?

     

    宜しくお願いします。

     

    2007年6月15日 0:41