The road to C# master trapemiya

C#を中心に、.NETの話題を取り上げます。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  256  : 記事  1  : コメント  10248  : トラックバック  30

ニュース

Since 2005年10月26日

わんくま同盟

わんくま同盟

Microsoft MVP


Visual Developer - Visual C#

記事カテゴリ

書庫

日記カテゴリ

プロジェクトのプロパティで設定タブにある接続文字列なんですが、これをコードで変更すれば、動的に本番系とテスト系のデータベースを切り替えられるようになります。
ところがです。

if (本番系データベースを使うもんね)
   Hoge.Properties.Settings.Default.hogedbConnectionString = "本番系の接続文字列";
else
   Hoge.Properties.Settings.Default.hogedbConnectionString = "テスト系の接続文字列";

なんて書くことはできない。コンパイルエラーになってしまう。これは接続文字列のスコープは強制的にアプリケーションになり、スコープがアプリケーションなものはRead Onlyだからである。
この解決方法として、VS2005まではapp.configを書き換えてスコープをユーザーにすればよかった。

でも、VS2008ではapp.configは構造が変わったらしく、無理っぽい・・・。(本当?誰か知ってたら教えて)

困った。

で、ふと思い立って、hogedbConnectionString で右クリックして「定義へ移動」を行ってみた。

 public string hogedbConnectionString {
     get {
          return ((string)(this["hogedbConnectionString "]));
     }
}

あれ? セッターが無いだけ?

てなわけでセッターを追加。

public string hogedbConnectionString {
     get {
          return ((string)(this["hogedbConnectionString "]));
     }
     set
     {
          this["hogedbConnectionString "] = value;
      }
}

結果、これで見事にHoge.Properties.Settings.Default.hogedbConnectionString をコードから変更できるようなった。
注意としては、VS2008のデザイナをいじる度に、つまりプロジェクトのプロパティで設定タブにおける内容をいじる度にセッターが消えてしまうんで、また追加してあげなければならないということです。もっとも、消えたままだとコンパイルエラーになるんで追加し忘れることはありませんが。

もう一つ注意点。TableAdapterの内部でもHoge.Properties.Settings.Default.hogedbConnectionString が使われているわけであり、これもそのまま本番系、テスト系に切り替わるので思い通りなのですが、TableAdapterは最初にHoge.Properties.Settings.Default.hogedbConnectionString の内容を取り込むと、以降、二度と取り込みません。つまり、TableAdapterを一度でも使用した後は、接続文字列を変更できないということです。
(参考)
TableAdapterがインスタンス化されただけでは、まだ接続文字列を取り込んでいないので、接続文字列を切り替えることができます。

以上より、本番系、テスト系を切り替えるのは、アプリケーションの起動時に一度だけ行うのが良いでしょう。

投稿日時 : 2008年3月21日 17:01

コメント

# re: スコープがアプリケーションな接続文字列を動的に変更する方法(テスト系データベースと本番系データベースを動的に切り替える方法) 2008/03/21 17:09 trapemiya
考えてみると、接続文字列のスコープがユーザーに変更できればいいんですよね。どうもこの辺りが昔から融通がきかないなぁ。connectに改善要望出てるかなぁ? あとで見てみよう。

# re: スコープがアプリケーションな接続文字列を動的に変更する方法(テスト系データベースと本番系データベースを動的に切り替える方法) 2008/04/28 13:05 k_kazu
参考になりました。
> 注意としては、VS2008のデザイナをいじる度に、つまりプロジェクトのプロパティで設定タブにおける内容をいじる度にセッターが消えてしまう

これは、 partial class にして プロパティー名を変更する方がメンテナンス性が良いと思うのですが・・。
internal partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
#if DEBUG
public string hogedbConnectionString_Debug
{
set
{
this["TESTConnectionString"] = value;
}
}
#endif
}



# re: スコープがアプリケーションな接続文字列を動的に変更する方法(テスト系データベースと本番系データベースを動的に切り替える方法) 2008/05/01 14:49 trapemiya
k_kazuさん。partial classに書き込んでしまう方法ですが、素晴らしいです! 気づきませんでした。言われてみれば納得です。早速実践します。ありがとうございました。

# re: スコープがアプリケーションな接続文字列を動的に変更する方法(テスト系データベースと本番系データベースを動的に切り替える方法) 2009/04/03 13:53 3流プログラマ
partial classにして、プロパティにセッター加えるとできるんですね。非常に参考になりました。
でも、セッター作っても、プリケーション構成ファイルにはsaveできないんですよね。
なんかいい方法ないでしょうか。。。

# re: スコープがアプリケーションな接続文字列を動的に変更する方法(テスト系データベースと本番系データベースを動的に切り替える方法) 2009/04/03 17:35 trapemiya
>でも、セッター作っても、プリケーション構成ファイルにはsaveできないんですよね。

プロジェクトのプロパティの設定タブのところで他の接続文字列を追加し、それを使うようにしてはいかがでしょうか?

たぶん、

internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{

public string HogedbConnectionStringEx
{
get
{
return ((string)(this["HogedbConnectionString"]));
}
set
{
this["HogedbConnectionString"] = value;
}
}
}

な感じで作られていると思いますので、そのセッターに先の接続文字列をセットするようにします。

#質問の意味を取り違えているかもしれませんが・・・


# tes 2017/12/09 18:46 Galang
http://goo.gl/TLJKhQ konstruksi baja iwf http://bit.ly/2bgLGS7 jasa konstruksi gedung
http://goo.gl/TLJKhQ konstruksi bangunan lantai 2 http://bit.ly/2bgLGS7 jasa konstruksi baja wf
http://goo.gl/TLJKhQ konstruksi atap baja wf http://bit.ly/2bgLGS7 jasa konstruksi jembatan
http://goo.gl/TLJKhQ konstruksi crane http://bit.ly/2bgLGS7 jasa konstruksi bangunan
http://goo.gl/TLJKhQ konstruksi jembatan layang http://bit.ly/2bgLGS7 jasa konstruksi
http://goo.gl/TLJKhQ konstruksi bangunan bambu http://bit.ly/2bgLGS7 jasa konstruksi besi baja
http://goo.gl/TLJKhQ konstruksi baja vs beton bertulang http://bit.ly/2bgLGS7 jasa konstruksi gudang
http://goo.gl/TLJKhQ konstruksi bangunan tinggi http://bit.ly/2bgLGS7 jasa konstruksi gedung
http://goo.gl/TLJKhQ konstruksi baja wf untuk rumah http://bit.ly/2bgLGS7 jasa konstruksi baja wf
http://goo.gl/TLJKhQ menghitung konstruksi baja http://bit.ly/2bgLGS7 jasa konstruksi jembatan
http://goo.gl/TLJKhQ konstruksi baja jakarta http://bit.ly/2bgLGS7 jasa konstruksi bangunan
http://goo.gl/TLJKhQ konstruksi bangunan sipil http://bit.ly/2bgLGS7 jasa konstruksi
http://goo.gl/TLJKhQ konstruksi rumah baja http://bit.ly/2bgLGS7 jasa konstruksi besi baja
http://goo.gl/TLJKhQ konstruksi bangunan pabrik http://bit.ly/2bgLGS7 jasa konstruksi gudang
http://goo.gl/TLJKhQ konstruksi baja untuk rumah http://bit.ly/2bgLGS7 jasa konstruksi gedung
http://goo.gl/TLJKhQ konstruksi bangunan ruko 2 lantai http://bit.ly/2bgLGS7 jasa konstruksi baja wf
http://goo.gl/TLJKhQ konstruksi bangunan gudang http://bit.ly/2bgLGS7 jasa konstruksi jembatan
http://goo.gl/TLJKhQ konstruksi baja bandung http://bit.ly/2bgLGS7 jasa konstruksi bangunan
http://goo.gl/TLJKhQ konstruksi h beam http://bit.ly/2bgLGS7 jasa konstruksi
http://goo.gl/TLJKhQ konstruksi baja untuk gudang http://bit.ly/2bgLGS7 jasa konstruksi besi baja
http://goo.gl/TLJKhQ konstruksi baja cnp http://bit.ly/2bgLGS7 jasa konstruksi gudang


# xrqsHUsHNlpxhgOsO 2021/07/03 3:04 https://amzn.to/365xyVY
It as hard to come by well-informed people about this topic, however, you seem like you know what you are talking about! Thanks

# eBEWWHRMEloSxHJ 2021/07/03 4:35 https://www.blogger.com/profile/060647091882378654
You made some clear points there. I looked on the internet for the subject matter and found most persons will agree with your website.

# re: ?????????????????????????????(???????????????????????????????) 2021/07/15 8:02 ic hydroxychloroquine
chlorquine https://chloroquineorigin.com/# can hydroxychloroquine

# rhprajtciwvx 2022/05/09 9:19 mmiudj
is hydroxychloroquine safe to take https://keys-chloroquinehydro.com/

# rlawqetzuvet 2022/06/03 15:03 jihjfnuf
what is erythromycin https://erythromycinn.com/#

# Test, just a test 2022/12/14 0:21 https://www.candipharm.com/
canadian pharmacies ed pills https://www.candipharm.com/

Post Feedback

タイトル
名前
Url:
コメント