0

tengo el siguiente problema a la hora de inciar la aplicacion en C#, estoy relizando un ejercicio de programacion en capas. Pero en la cadena de conexion me sale la siguiente Excepcion.

Referencia a Objeto no establecida como Instancia de un Objeto

using CapaEntidad;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;


namespace CapaDatos
{
    public class D_Empleados
    {

        SqlConnection Cn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnection"].ToString());    

        public DataTable D_listado()
        {
            SqlCommand CMD = new SqlCommand("sp_listar", Cn)
            {
                CommandType = CommandType.StoredProcedure
            };
            SqlDataAdapter da = new SqlDataAdapter(CMD);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }
    }
}

Saludos.

Leandro Tuttini
  • 35,380
  • 3
  • 13
  • 40
  • Por favor edita y coloca el código como texto y no como imagen –  Mar 18 '19 at 20:50
  • La llave `MyConnection` no existe en el archivo de configuracion de la aplicacion. Revisate este [enlace](https://docs.microsoft.com/en-us/dotnet/api/system.configuration.configurationmanager.connectionstrings?view=netframework-4.7.2) – Orlando De La Rosa Mar 18 '19 at 20:54
  • Se la declare en el archivo app.config de la capa presentacion. – Miguel Olivan Mar 18 '19 at 20:57
  • pon un breakpoint en el codigo y ve paso a paso para ver si puede recuperar el connection string, esta claro que el problema es cuando quieres recuperar la key MyConnection – Leandro Tuttini Mar 18 '19 at 20:58

2 Answers2

1

El codigo parece estar correcto, pero no definas el connection string de forma global

public class D_Empleados
{
    public DataTable D_listado()
    {
        string connstring = ConfigurationManager.ConnectionStrings["MyConnection"].ToString();

        using(SqlConnection Cn = new SqlConnection(connstring))
        {
            SqlCommand CMD = new SqlCommand("sp_listar", Cn);
            CMD.CommandType = CommandType.StoredProcedure

            SqlDataAdapter da = new SqlDataAdapter(CMD);
            DataTable dt = new DataTable();
            da.Fill(dt);

            return dt;
        }
    }
}

que la conexion este dentro del using asi al descartar la clase no queda la conexion abierta.

Leandro Tuttini
  • 35,380
  • 3
  • 13
  • 40
  • Listo Amigos Ya lo he Resuelto. Poniendo una Descripcion que esta en el archivo de app.config, antes de la declaracion de la Variable MyConnection. – Miguel Olivan Mar 18 '19 at 21:08
-1

En el archivo de configuracion seccion Connection string se define el nombre de la cadena y queda

<connectionStrings>
    <add name="CapaPresentacion.Properties.Settings.MyConnection" connectionString="Data Source=(localDb)\MyBase"/>
  </connectionStrings>

para la obtencion de este parametro en el metodo se tiene:

string Connstring = ConfigurationManager.ConnectionStrings["CapaPresentacion.Properties.Settings.MyConnection"].ToString();
Miguel Zarate
  • 2,334
  • 1
  • 8
  • 29
  • Esta es una respuesta? –  Mar 18 '19 at 21:20
  • Si es Respuesta – Miguel Olivan Mar 18 '19 at 21:21
  • 1
    Entonces por favor explícala por qué solo poner código sin contexto se considera de baja calidad –  Mar 18 '19 at 21:22
  • Una Disculpa, no sabia como usar los comentarios. – Miguel Olivan Mar 18 '19 at 21:25
  • @MiguelOlivan me alegra que encontraras una solución, pero esto ha sido reportado como publicación de baja calidad debido a su extensión y contenido. Debes editar la respuesta para añadir más detalles: ¿qué es lo que cambiaste para que funcionara? ¿qué es lo que hace diferente y hace que funcione? Lee [answer] para más información. Y no te olvides de marcar tu solución como aceptada cuando pase el tiempo requerido. – Alvaro Montoro Mar 18 '19 at 22:21
  • Si tu respuesta es que estaba mal el nombre de la propiedad donde tenias tu cadena de conexion, entonces no es una respuesta, es lo que se considera un error tipografico. – gbianchi Mar 19 '19 at 13:11