2009-10-07 13 views
10

Estoy interesado en mostrar en una aplicación de Windows Forms una lista de N botones de opción para que el usuario elija un servidor de base de datos de destino. Me gustaría agregar las cadenas de conexión de SQL Server en el archivo app.config, para que la aplicación las lea en el tiempo de ejecución y las muestre en forma de ventanas como botones de opción.Varias cadenas de conexión de SQL Server en el archivo app.config

Al principio pensó en utilizar un delimitador para separar las conexiones

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

Y luego dividir los pares de valores clave.

¿Es posible hacer esto de otra manera?

Respuesta

30

Para encontrar todas las cadenas de conexión definidas desde su app.config, use ConfigurationManager (desde System.Configuration).

Tiene una enumeración: ConfigurationManager.ConnectionStrings que contiene todas las entradas en su <connectionStrings>.

Puede recorrer sobre él con este código:

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

El Name es sólo el nombre simbólico que da a su cadena de conexión - que puede ser cualquier cosa, de verdad.

La ConnectionString es la cadena de conexión en sí.

El ProviderName es el nombre del proveedor de la conexión, p. System.Data.SqlClient para SQL Server (y otros para otro sistema de base de datos). Si omite el atributo providerName= de su cadena de conexión en la configuración, su valor predeterminado es SQL Server (System.Data.SqlClient).

Marc

+0

Obtiene cadenas de conexiones en *** machine.config ***, no solo *** app.config *** – Kiquenet

3

Sí, es posible hacer esto de otra manera. Verifique la sección connectionStrings que puede hacer en el archivo app.config.

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

cómo doy un bucle a través de los elementos secundarios del elemento "connectionStrings" para obtener todos los pares clave de valores? –

12

Utilice la sección connectionStrings para definir las cadenas de conexión.

<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

cómo bucle a través de los elementos secundarios del elemento "connectionStrings" para obtener todos los pares clave de valores. –

+2

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

+0

nice! Necesitaba saber cómo agregar el tiempo de espera ... ¡Gracias! –

0

Puede utilizar la clase AppSettings, obtener una lista de todos los keys que comienzan con ConnectionString y mostrarlos.

su archivo de configuración se verá así:

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

, usted puede obtener el nombre, por splitting el nombre de clave (usando "_" en este ejemplo).

BTW: Usted si también usa la sección ConnectionStrings, usted solo está interesado en las cadenas de conexión.

+1

Definitivamente recomendaría utilizar la sección '' en su app.config en su lugar, ¡eso es lo que realmente está ahí! –

+1

@marc_s: Tiene razón – GvS

1

Podemos declarar cadena de conexión múltiple bajo Web.Config o app.config

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

En DAL o.cs archivo que se pueda acceder a las cadenas de conexión como esta string SounceConnection = ConfigurationManager.ConnectionStrings["SourceDB"].ConnectionString; string DestinationConnection = ConfigurationManager.ConnectionStrings["DestinationDB"].ConnectionString;

0

Esto es cómo utilizar LINQ para obtener la lista de cadenas de conexión:

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

O usted puede construir un diccionario de ella:

Dictionary<string/*name*/, string/*connectionString*/> keyValue = ConfigurationManager.ConnectionStrings 
    .Cast<ConnectionStringSettings>() 
    .ToDictionary(v => v.Name, v => v.ConnectionString); 
Cuestiones relacionadas