The road to C# master trapemiya

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

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

ニュース

Since 2005年10月26日

わんくま同盟

わんくま同盟

Microsoft MVP


Visual Developer - Visual C#

記事カテゴリ

書庫

日記カテゴリ

2008年3月21日 #

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

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がインスタンス化されただけでは、まだ接続文字列を取り込んでいないので、接続文字列を切り替えることができます。

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

posted @ 17:01 | Feedback (13)

知ってる人には当たり前なんでしょうが、私はたまたま見つけてちょっとうれしくなりました。
elseの直後にキャレットがある状態でTabキーを押すと、ぬあんと、

else
{

}

という具合に、{と}を自動生成してくれ、しかもキャレットが{と}の間の行に自動的に行ってくれます。

posted @ 15:44 | Feedback (6)