Para obtener los datos de conexión a una base de datos que tenemos guardados en nuestro archivo app.config o web.config (dependiendo el tipo de proyecto), haremos uso de la clase ConnectionStringSettingsCollection y ConfigurationManager.
En nuestro archivo de configuración (app.config o web.config), se encuentra una sección en la cual estan guardadas las cadenas de conexión, por ejemplo:
<configuration> <configSections> </configSections> <connectionStrings> <add name="conexionPatito" connectionString="Data Source=localhost;Initial Catalog=basededatosPatito;User ID=pato;Password=patofeo" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
Para acceder a esos datos y saber cual es el servidor o el nombre de la base de datos, a continuación escribo una clase comentada paso por paso:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; namespace Pato { /// <summary> /// Clase encargada de la capa de datos del modulo de configuracion de conexion /// Héctor de León /// 07/01/2013 /// </summary> class Conexion { //atributos public string servidor = ""; public string usuario = ""; public string password = ""; public string baseDeDatos = ""; //nombre de la conexión a modificar private string nombreConexion = "conexionPatito"; /// <summary> /// obtiene los datos de la conexión para ser utilizados en el formulario /// </summary> /// <returns></returns> public bool getData() { bool exito = false; // se obtienen las conexiones System.Configuration.ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings; //si existe por lo menos una conexión continuamos if (connections.Count != 0) { //Recorremos las conexiones existentes foreach(ConnectionStringSettings connection in connections) { //asignamos el nombre string name = connection.Name; //obtenemos el proveedor, solo por demostración, no lo utilizaremos ni nada. string provider = connection.ProviderName; //obtenemos la cadena string connectionString = connection.ConnectionString; //comparamos el nombre al de nuestro atributo de la clase para verificar si es la cadena //de conexión que modificaremos if (name.Equals(nombreConexion)) { //separamos la conexión en un arreglo tomando ; como separador string[] sC = connectionString.Split(';'); foreach(String s in sC) { //separamos por el simbolo = para obtener el campo y el valor string[] spliter = s.Split('='); //comparamos los valores switch (spliter[0].ToUpper()) { case "DATA SOURCE": servidor = spliter[1]; break; case "USER ID": usuario = spliter[1]; break; case "PASSWORD": password = spliter[1]; break; case "INITIAL CATALOG": baseDeDatos = spliter[1]; break; } } } } } else { Console.WriteLine("No existe la conexión"); } return exito; } }
Ahora de esta manera la podemos utilizar:
//creamos nuestro objeto Conexion oConexion = new Conexion(); //ejecutamos el metodo oConexion.getData(); //imprimimos el resultado Console.WriteLine("servidor " + oConexion.servidor + " base de datos: " + oConexion.baseDeDatos + " usuario: " + oConexion.usuario + " password: " + oConexion.password);
Nota: Recuerden agregar arriba: using System.Configuration;
Si tienen alguna duda en comentarios pueden preguntar.
Y como siempre el código es para explicar no es la manera formal de hacerlo (por los atributos públicos :().