2016-07-04 7 views
-1

私のデータベースの接続文字列を持つapp.configファイルがあります。 私がやりたいことは、私はこのコードを使用している理由の異なるデータベースに接続するために、次のとおりです。実行時に接続文字列を変更するMySql C#

connectionString = "Data Source=blah;Initial Catalog=blah;UID=blah;password=blah"; 
     var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings"); 
     connectionStringsSection.ConnectionStrings[nameofConnectionString].ConnectionString = connectionString; 
     config.Save(); 
     ConfigurationManager.RefreshSection(nameofConnectionString); 

それがうまく機能し、それは、接続文字列を変更しましたが、問題は、それは言って私にエラーを送信する「facerec6です.0.cdcolは

私のデフォルトの初期カタログ= facerec6.0

私は何をするだろう「は存在しないのですか?

答えて

0

ConnectionStringSectionは、名前付き接続文字列を格納するための単なるコンテナです。異なるデータベースに接続する場合は、最初からそのセクションに異なる接続文字列を格納し、アプリケーションが実行時に使用する接続文字列をどのように選択するかを決定することから始めてください。

このセクションはちょうどそれ以上のものであると考えてください。接続文字列を取得するための標準的な方法で接続文字列を格納するのは、便利で既知の場所です。コードに取り組んでいる他の開発者は、それらを探す場所とそれらを取得する方法を知っています。

実行時にそのセクションを変更してファイルを保存することは技術的には可能ですが、私はそれをしません。同じ環境で実行しているときに異なる接続文字列を使用する可能性のある同じコードを使用している場合(開発用、QA用、および本番用)は、このようなインターフェースにクラスを依存させることができます:Something接続文字列を必要とするクラスは、工場に渡すことができ、工場、取得する接続文字列を決定するためにそれを使用することができる値である

public interface IConnectionStringFactory 
{ 
    string GetConnectionString(Something key); 
} 

。そのようにして、接続文字列を使用するクラスはそのロジックから絶縁されます。 1つの接続文字列を使用する理由や別の接続文字列を使用する理由はわかりません。それは単に工場からの接続文字列を取得し、それを使用します。

環境によって接続文字列が異なる場合、それはずっと簡単です。config transformsでこれを行うことができます。ほとんどの場合、異なる環境の場合すべて接続文字列は環境ごとに異なるため、セクション全体を置き換えることができます。

<connectionStrings xdt:Transform="Replace"> 
    <add name="connectionStringA" connectionString="...whatever..." /> 
</connectionStrings> 
+0

これが答えの場合は、それを返信としてマークすることを忘れないでください。ありがとう –

0

代わりにこれを試してください:RefreshSectionを使用するときは、セクション、ない要素をリフレッシュする必要が

<connectionStrings> <- this is the section 
    <add name="facerec6.0"/> <- this is the element 
    <add ... /> 
</connectionStrings> 

ConfigurationManager.RefreshSection("connectionStrings"); 

ので。

+0

私はすでにあなたの言うことでしたが、それは私に – rillakkuma

+0

を「テーブル 『facerec6.0.cdcolが存在しない』」例外を与える私は別のエラーだと思います。 '' facerec6.0.cdcol'が設定ファイルの接続文字列セクションに存在するかどうか確認できますか? – KaeL

関連する問題