質問者
<ConnectionString> 要素の、EXE, DLLによるふるまいの違い

質問
-
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>私の単純な思い違い(勘違い)なのかもしれませんが、皆様、ご教授願えませんでしょうか。
宜しくお願いします。
すべての返信
-
なるほど。
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>ってどうやって制御するんでしょうか?
宜しくお願いします。