2009-10-07 54 views
10

私は、Windowsフォームアプリケーションで、ターゲットデータベースサーバーを選択するためのN個のラジオボタンのリストを表示することに興味があります。 SQL Serverの接続文字列をapp.configファイルに追加して、実行時にアプリケーションによって読み込まれ、ラジオボタンとしてWindowsフォームでレンダリングされるようにします。app.configファイル内の複数のSQL Server接続文字列

は、最初に私は接続

<appSettings> 
    <add key="ConnectionString" value="connection1|user id=user;password=123;server=10.0.0.1;database=myDatabase;connection timeout=30|connection2|user id=user;password=123;server=10.0.0.2;database=myDatabase;connection timeout=30"/> 
</appSettings> 

を分離するための区切り文字を使用するのではと思ったし、キーと値のペアを分割します。

これは別の方法で行うことはできますか?

答えて

30

app.configで定義されたすべての接続文字列を見つけるには、ConfigurationManager(System.Configurationから)を使用します。

<connectionStrings>のすべてのエントリを含む列挙型:ConfigurationManager.ConnectionStringsがあります。このコードで、それ以上の

あなたがすることができますループ:

foreach(ConnectionStringSettings css in ConfigurationManager.ConnectionStrings) 
{ 
    string name = css.Name; 
    string connString = css.ConnectionString; 
    string provider = css.ProviderName; 
} 

Nameは、あなたの接続文字列を与えるだけのシンボル名です - それは本当に、何もすることができます。

ConnectionStringは接続文字列そのものです。

ProviderNameは、接続のプロバイダーの名前です。 System.Data.SqlClient(その他のデータベースシステム用) config内の接続文字列からproviderName=属性を省略すると、既定値はSQL Server(System.Data.SqlClient)になります。

マルク・

+0

*** app.config ***だけでなく、*** machine.config ***の接続文字列を取得します。 – Kiquenet

3

はい、これは別の方法で行うことができます。 app.configファイルで作成できるconnectionStringsセクションを確認してください。

<configuration> 
    <connectionStrings> 
     <add name="" connectionString=""/> 
     <add name="" connectionString=""/> 
    </connectionStrings> 
</configuration> 
+0

すべてのキー値のペアを取得するために、 "connectionStrings"要素の子をループしますか? –

12

接続文字列セクションを使用して、接続文字列を定義します。

<connectionStrings> 
    <add name="connection1" connectionString="user id=user;password=123;server=10.0.0.1;database=myDatabase;connection timeout=30"/> 
    <add name="connection2" connectionString="user id=user;password=123;server=10.0.0.2;database=myDatabase;connection timeout=30"/> 
</connectionStrings> 
+0

"connectionStrings"要素の子をループしてすべてのキー値のペアを取得する方法 –

+2

foreach(ConfigurationManager.ConnectionStringsのConnectionStringSettings connSettings) { } –

+0

nice!私はタイムアウトを追加する方法を知る必要があった...ありがとう! –

0

あなたは、ConnectionStringで開始し、それらを表示するすべてのkeysのリストを取得し、AppSettingsクラスを使用することができます。

あなたの設定ファイルは次のようになります。

<appSettings> 
    <add key="ConnectionString_Name1" value="..."/> 
    <add key="ConnectionString_Name2" value="..."/> 
    <add key="ConnectionString_Name3" value="..."/> 
</appSettings> 

あなたは(この例では、「_」を使用して)splittingキー名で、名前を取得することができます。

目次:ConnectionStringsセクションを使用すると、接続文字列でのみインターレースされます。

+1

代わりにapp.configの ''セクションを使用することをお勧めします。本当にそうです! –

+1

@marc_s:あなたが正しくて – GvS

1

は、我々はのWeb.Configまたはapp.configを

DALで
<connectionStrings> 
<add name="SourceDB" connectionString="..." /> 
<add name="DestinationDB" connectionString="..." /> 
</connectionStrings> 

または下に複数の接続文字列を宣言することができます。

List<string> connectionStrings = ConfigurationManager.ConnectionStrings 
    .Cast<ConnectionStringSettings>() 
    .Select(v => v.ConnectionString) 
    .ToList(); 

またはあなたはそれの辞書を構築することができます::CSファイルは、あなたがこのstring SounceConnection = ConfigurationManager.ConnectionStrings["SourceDB"].ConnectionString; string DestinationConnection = ConfigurationManager.ConnectionStrings["DestinationDB"].ConnectionString;

0

のように接続文字列にアクセスすることができますこれは、接続文字列のリストを取得するためにLINQを使用する方法である

方法
Dictionary<string/*name*/, string/*connectionString*/> keyValue = ConfigurationManager.ConnectionStrings 
    .Cast<ConnectionStringSettings>() 
    .ToDictionary(v => v.Name, v => v.ConnectionString); 
関連する問題