2009-10-07 10 views
10

Jestem zainteresowany wyświetlaniem w aplikacji Windows Forms listy N przycisków radiowych, aby użytkownik mógł wybrać docelowy serwer bazy danych. Chciałbym dodać ciągi połączenia programu SQL Server w pliku app.config, aby były one odczytywane przez aplikację w czasie wykonywania i renderowane w postaci okien jako przyciski opcji.Wiele ciągów połączenia programu SQL Server w pliku app.config

Początkowo myślałem o użyciu separatora do oddzielenia połączeń

<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> 

A potem podzielić par wartości klucza.

Czy można to zrobić w inny sposób?

Odpowiedz

30

Aby znaleźć wszystkie zdefiniowane ciągi połączeń z pliku app.config, należy użyć ConfigurationManager (z System.Configuration).

Posiada wyliczenie: ConfigurationManager.ConnectionStrings, które zawiera wszystkie wpisy w twoim <connectionStrings>.

Można pętli nad nim z tym kodem:

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

Name jest tylko symboliczna nazwa dajesz ciąg połączenia - może to być cokolwiek, naprawdę.

ConnectionString to sam ciąg połączenia.

Numer ProviderName to nazwa dostawcy połączenia, np. System.Data.SqlClient dla SQL Server (i inne dla innego systemu baz danych). Jeśli pominiesz atrybut providerName= z ciągu połączenia w config, domyślnie jest to SQL Server (System.Data.SqlClient).

Marc

+0

Pobiera ciągi połączeń w *** machine.config ***, nie tylko *** app.config *** – Kiquenet

3

Tak, można to zrobić w inny sposób. Sprawdź sekcję connectionStrings, którą można utworzyć w pliku app.config.

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

jak czy przechodzę przez dziecko elementu "connectionStrings", aby uzyskać wszystkie pary wartości klucza? –

12

Skorzystaj z sekcji connectionStrings, aby zdefiniować ciągi połączeń.

<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

w jaki sposób mogę pętli przez childs elementu "connectionStrings", aby uzyskać wszystkie pary wartości klucza. –

+2

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

+0

fajne! Musiałem wiedzieć, jak dodać limit czasu ... Dzięki! –

0

Można użyć klasy AppSettings, uzyskać listę wszystkich keys które zaczynają się ConnectionString i wyświetlać je.

plik konfiguracyjny będzie wyglądać następująco:

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

można uzyskać nazwę, przez splitting nazwę klucza (używając „_” w tym przykładzie).

BTW: Ty powinien używać również sekcji ConnectionStrings, jesteś tylko interrested w ciągi połączenia.

+1

Zdecydowanie zaleca się zamiast tego użycie sekcji '' w pliku app.config - właśnie to jest naprawdę możliwe! –

+1

@marc_s: Masz rację – GvS

1

Możemy zadeklarować ciąg połączenia wielokrotnego pod web.config lub app.config

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

W DAL lub.cs plik można uzyskać dostęp do ciągów połączenia jak to string SounceConnection = ConfigurationManager.ConnectionStrings["SourceDB"].ConnectionString; string DestinationConnection = ConfigurationManager.ConnectionStrings["DestinationDB"].ConnectionString;

0

ten sposób używać LINQ do listy ciągów łączących się:

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

Albo można zbudować słownika to:

Dictionary<string/*name*/, string/*connectionString*/> keyValue = ConfigurationManager.ConnectionStrings 
    .Cast<ConnectionStringSettings>() 
    .ToDictionary(v => v.Name, v => v.ConnectionString); 
Powiązane problemy