none
Ayuda con conexion string (app.Config) RRS feed

  • Pregunta

  • Hola hermanos , tengo varios dias con este problema y a decir verdad no lo entiendo, ya que estoy acostumbrado hacer mi conexion al aBD de esta manera :

    1-Tengo dos proyectos uno que es el cliente , contiene una carpeta con todos los formularios que utilizare

    2-Otro proyecto llamado: AccesoDatos, este contiene un app.config , para conectarme a mi base y una clase publica (DataAccess), con un metodo de tipo "string"; que retorna la lectura del app.config (Conexion a mi base de datos)

    3-He puesto un formulario llamado Prueba , este contiene un dategridView, que sera llenado al cargar el formulario , haciendo llamada a la clase : DataAccess del proyecto AccesoDatos.

    Cuando corro la prueba , se inicia el evento load del form , tira la siguiente excepcion:

    The ConnectionString property has not been initialized. (No se ha inicializado la propiedad ConnectionString).

    Tengo varios dias intentandolo , inlcuso lo hago en otra pc , por si es un virus y me pasa lo mismo y a decir verdad siempre lo he hecho de esta manera , agrego la referencia del proyecto AccesoDatos hacia el proyecto prueba , la utilizo (Using AccesoDatos;), pero no se por que la excepcion de arriba.

    Aqui les dejo los codigos para que me ayuden:

    App.Config

    <?

     

    xml version="1.0" encoding="utf-8" ?>

    <

     

    configuration>

    <

     

    connectionStrings>

    <

     

    add name="AccesoDatos.Properties.Settings.Conexion"

     

     

    connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=UpmDB;Integrated Security=true"

     

     

    providerName="System.Data.SqlClient"/>

    </

     

    connectionStrings>

    </

     

    configuration>

    ------------------------------------------------------------------------

    ClaseDataAccess:

    using

     

    System;

    using

     

    System.Collections.Generic;

    using

     

    System.Linq;

    using

     

    System.Text;

    using

     

    System.Configuration;

    namespace

     

    AccesoDatos

    {

     

    public class DataAccess

    {

     

    public string LeerConexion()

    {

     

    try

    {

     

    return

     

    ConfigurationManager.ConnectionStrings["AccesoDatos.Properties.Settings.Conexion"].ConnectionString;

    }

     

    catch (Exception) { return null; }

    }

    }

    }

    --------------------------------------------------------------------------------------------------

    El formulario de prueba con su DatagridView:

     

    using AccesoDatos; //Utilizo la referencia

    private void prueba_Load(object sender, EventArgs e)

    {

    AccesoDatos.

    DataAccess obj = new DataAccess();

     

    SqlConnection cn = new SqlConnection(obj.LeerConexion());

     

    //Creando un nuevo adaptador de datos

     

    SqlDataAdapter da = new SqlDataAdapter("Select * from Digitadores", cn);

     

    //Creando un nuevo dataset

     

    DataSet ds = new DataSet();

     

    //Llenando los datos para el adaptar e invocando la propiedad VALSEC

    da.Fill(ds,

    "VALSEC");

     

     

    //Pasandole los datos al DatagridView

    dataGridView1.DataSource = ds.Tables[0];

     

    try

    {

    cn.Open();

    }

     

    catch (Exception)

    {

     

    throw;

    }

     

    finally

    {

    cn.Dispose();

    }

     

    }

    ----------------------------------------

    da.Fill(ds, "VALSEC");   Justamente en esta linea se detiene el programa y sale la excepcion:

    No se Controlo InvalidOperationException

    The ConnectionString property has not been initialized. (No se ha inicializado la propiedad ConnectionString).

    -----------------------------------------------------------

    Necesito la yuda por favor , ya que tengo que entregar un proyecto.

    Gracias por sus atenciones!!!

    miércoles, 16 de marzo de 2011 16:32

Respuestas

  • Copia o mueve el archivo App.config hacia el proyecto que tiene los formularios.

    Saludos!!!


    MSM-DotNet
    miércoles, 16 de marzo de 2011 16:43
    Moderador
  • Ok deja ver si todo bien , te aviso en un momento hermano.....
    miércoles, 16 de marzo de 2011 16:52
  • el app.config no se define en los proyectos del tipo Class Library, se definen en los del tipo Web Application, service o Windows Application

    agrega el app.config en el proyecto winforms y veras que funciona, eso si quitalo del proyecto de data access

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 16 de marzo de 2011 16:54
  • OK he movido el archivo pero, me sigue haciendo el mismo error, que hago?
    miércoles, 16 de marzo de 2011 16:55
  • En el método public string LeerConexion() verifica si esta obteniendo la cadena de conexión o si se esta generando una excepción. En caso de generarse una excepción, envia el mensaje que te muestra.

    Saludos!!!


    MSM-DotNet
    miércoles, 16 de marzo de 2011 17:06
    Moderador
  • veo que usas el

    ConfigurationManager.ConnectionString

    en ese caso aplica

     

    public string LeerConexion()
    {
        return ConfigurationManager.ConnectionStrings["AccesoDatos.Properties.Settings.Conexion"].ToString();
    }

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 16 de marzo de 2011 17:17
  • lo he hecho asi como me dieces y sigue el mismo error...

       e incluso tengo he eliminado el proyecto AccesoDatos y he creado mi app.config, mi clase accesDatos en el proyecto cliente y aun asi sigue teniendo el mismo error, que hago?

    miércoles, 16 de marzo de 2011 18:28
  • prueba de usar el

    ConfigurationManager.ConnectionStrings["AccesoDatos.Properties.Settings.Conexion"].ToString();

    desde el propio formulario para ver si alli puede recuperar el valor

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 16 de marzo de 2011 18:32
  • Ok , pero la exepcion que me da es cuando estoy llenando el datagrid :

      

    da.Fill(ds, "VALSEC");   Justamente en esta linea se detiene el programa y sale la excepcion:

    No se Controlo InvalidOperationException

    The ConnectionString property has not been initialized. (No se ha inicializado la propiedad ConnectionString).

    Ya lo he depurado y verificado con los puntos de interrupciones y siempre es ahy

    miércoles, 16 de marzo de 2011 18:39
  • Lo intento asi tambien , pero parece que cuando se dañaba la primera vez , he intento como hacerlo como me han dicho, ya no quiere funcionar.

    comense un proyecto nuevo no agregue ningun tipo de capas, solo la de presentacion y todo lo tengo ahy mismo el app.config, la clase de acceso a dtos e incluso utilice el mismo codigo anterior , y me funciona , no se si es cuando se daña la primera vez.

    En verdad que tengo una semana en esto y no llego a comprender porque , si no hay errores de sintaxis , hasta ya lo he hecho todo con aplicacion de Windows Forms y lo mismo.

    miércoles, 16 de marzo de 2011 19:01
  • ahh ok pero ese error es porque no estas asignando el connection string al objecto SqlConnection

    en lugar de hacer esto

    SqlConnection cn = new SqlConnection(obj.LeerConexion());

     

    usa

    string connstring = obj.LeerConexion();

    SqlConnection cn = new SqlConnection(connstring);

     

    pon un breakpoint en la segunda linea, he inspecciona si la variable connstringtiene un valor correcto

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 16 de marzo de 2011 19:24
  • dejame intentar de esa manera , te dejo saber entoces hermanos!
    miércoles, 16 de marzo de 2011 19:28
  • public

     

    class AccesoDatoscs

    {

     

     

    public string LeerConexion()

    {

     

    try

    {

     

    return

     

    ConfigurationManager.ConnectionStrings["UPMControl.Properties.Settings.Conexion"].ToString();

    }

     

    catch (Exception)

    {

     

    throw;

    }

    }

     

    }

    le agregado el catch (exepcion) para verificar alguna exepcion aqui y mira la que me tira:

    No se controlo NullReferenceExepction:

    Object reference not set to an instance of an object.

    tambien lo intente como me digiste :

     

    AccesoDatoscs obj = new AccesoDatoscs();

     

    //SqlConnection cn = new SqlConnection(obj.LeerConexion());

     

     

    string connstring = obj.LeerConexion();

     

    SqlConnection cn = new SqlConnection(connstring);

    y pasa lo mismo, quisiera hacerlo de otra manera sin usar el app.config , pero es que creo que esa forma es la mas comoda.

    miércoles, 16 de marzo de 2011 19:41
  • Le puse el breakpoint a connstring y en su columna de valor tiene "Null"

    miércoles, 16 de marzo de 2011 19:47
  • Ok , ya creo que esta solucionado, solo es cuestion de usuario en el sql, ya que estoy en mi empleo y aqui tienen un dominio de red y el sql 2005 express no me permite abrirlo, pero se que cuando llegue a mi casa me funcionara , gracias de todos modos, seguire adelante!!!
    miércoles, 16 de marzo de 2011 20:43

Todas las respuestas

  • Copia o mueve el archivo App.config hacia el proyecto que tiene los formularios.

    Saludos!!!


    MSM-DotNet
    miércoles, 16 de marzo de 2011 16:43
    Moderador
  • Ok deja ver si todo bien , te aviso en un momento hermano.....
    miércoles, 16 de marzo de 2011 16:52
  • el app.config no se define en los proyectos del tipo Class Library, se definen en los del tipo Web Application, service o Windows Application

    agrega el app.config en el proyecto winforms y veras que funciona, eso si quitalo del proyecto de data access

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 16 de marzo de 2011 16:54
  • OK he movido el archivo pero, me sigue haciendo el mismo error, que hago?
    miércoles, 16 de marzo de 2011 16:55
  • En el método public string LeerConexion() verifica si esta obteniendo la cadena de conexión o si se esta generando una excepción. En caso de generarse una excepción, envia el mensaje que te muestra.

    Saludos!!!


    MSM-DotNet
    miércoles, 16 de marzo de 2011 17:06
    Moderador
  • veo que usas el

    ConfigurationManager.ConnectionString

    en ese caso aplica

     

    public string LeerConexion()
    {
        return ConfigurationManager.ConnectionStrings["AccesoDatos.Properties.Settings.Conexion"].ToString();
    }

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 16 de marzo de 2011 17:17
  • lo he hecho asi como me dieces y sigue el mismo error...

       e incluso tengo he eliminado el proyecto AccesoDatos y he creado mi app.config, mi clase accesDatos en el proyecto cliente y aun asi sigue teniendo el mismo error, que hago?

    miércoles, 16 de marzo de 2011 18:28
  • prueba de usar el

    ConfigurationManager.ConnectionStrings["AccesoDatos.Properties.Settings.Conexion"].ToString();

    desde el propio formulario para ver si alli puede recuperar el valor

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 16 de marzo de 2011 18:32
  • Ok , pero la exepcion que me da es cuando estoy llenando el datagrid :

      

    da.Fill(ds, "VALSEC");   Justamente en esta linea se detiene el programa y sale la excepcion:

    No se Controlo InvalidOperationException

    The ConnectionString property has not been initialized. (No se ha inicializado la propiedad ConnectionString).

    Ya lo he depurado y verificado con los puntos de interrupciones y siempre es ahy

    miércoles, 16 de marzo de 2011 18:39
  • Lo intento asi tambien , pero parece que cuando se dañaba la primera vez , he intento como hacerlo como me han dicho, ya no quiere funcionar.

    comense un proyecto nuevo no agregue ningun tipo de capas, solo la de presentacion y todo lo tengo ahy mismo el app.config, la clase de acceso a dtos e incluso utilice el mismo codigo anterior , y me funciona , no se si es cuando se daña la primera vez.

    En verdad que tengo una semana en esto y no llego a comprender porque , si no hay errores de sintaxis , hasta ya lo he hecho todo con aplicacion de Windows Forms y lo mismo.

    miércoles, 16 de marzo de 2011 19:01
  • ahh ok pero ese error es porque no estas asignando el connection string al objecto SqlConnection

    en lugar de hacer esto

    SqlConnection cn = new SqlConnection(obj.LeerConexion());

     

    usa

    string connstring = obj.LeerConexion();

    SqlConnection cn = new SqlConnection(connstring);

     

    pon un breakpoint en la segunda linea, he inspecciona si la variable connstringtiene un valor correcto

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 16 de marzo de 2011 19:24
  • dejame intentar de esa manera , te dejo saber entoces hermanos!
    miércoles, 16 de marzo de 2011 19:28
  • public

     

    class AccesoDatoscs

    {

     

     

    public string LeerConexion()

    {

     

    try

    {

     

    return

     

    ConfigurationManager.ConnectionStrings["UPMControl.Properties.Settings.Conexion"].ToString();

    }

     

    catch (Exception)

    {

     

    throw;

    }

    }

     

    }

    le agregado el catch (exepcion) para verificar alguna exepcion aqui y mira la que me tira:

    No se controlo NullReferenceExepction:

    Object reference not set to an instance of an object.

    tambien lo intente como me digiste :

     

    AccesoDatoscs obj = new AccesoDatoscs();

     

    //SqlConnection cn = new SqlConnection(obj.LeerConexion());

     

     

    string connstring = obj.LeerConexion();

     

    SqlConnection cn = new SqlConnection(connstring);

    y pasa lo mismo, quisiera hacerlo de otra manera sin usar el app.config , pero es que creo que esa forma es la mas comoda.

    miércoles, 16 de marzo de 2011 19:41
  • Le puse el breakpoint a connstring y en su columna de valor tiene "Null"

    miércoles, 16 de marzo de 2011 19:47
  • Ok , ya creo que esta solucionado, solo es cuestion de usuario en el sql, ya que estoy en mi empleo y aqui tienen un dominio de red y el sql 2005 express no me permite abrirlo, pero se que cuando llegue a mi casa me funcionara , gracias de todos modos, seguire adelante!!!
    miércoles, 16 de marzo de 2011 20:43