Foros del Web » Programación para mayores de 30 ;) » .NET »

Referencia a objeto no establecida como instancia de un objeto. C#.

Estas en el tema de Referencia a objeto no establecida como instancia de un objeto. C#. en el foro de .NET en Foros del Web. Hola... antes que todo, decir que he buscado, y no encuentro la solución. Resulta que tengo el siguiente código : EmpresaADO.cs @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C#: ...
  #1 (permalink)  
Antiguo 25/05/2010, 18:32
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 21 años
Puntos: 89
Referencia a objeto no establecida como instancia de un objeto. C#.

Hola... antes que todo, decir que he buscado, y no encuentro la solución.

Resulta que tengo el siguiente código :

EmpresaADO.cs
Código C#:
Ver original
  1. namespace Tarea.Capas.CapaLogicaNegocio.LogicaNegocio
  2. {
  3.     public class EmpresaADO
  4.     {
  5.        DALSQLServer sql = null;
  6.         DataSet ds = null;
  7.  
  8.  
  9.         public EmpresaADO()
  10.         {
  11.             if (sql == null)
  12.                 sql = new DALSQLServer();
  13.             sql.ConnectionString = "Data Source=localhost;Initial Catalog=ldp3501;Integrated Security=true";
  14.         }
  15.  
  16.  
  17.         public List<Empresa> ListarEmpresa()
  18.         {
  19.             Empresa emp = null;
  20.             ds = new DataSet();
  21.             List<Empresa> le = new List<Empresa>();
  22.             sql.SqlCommand = "SELECT nombre,ciudad,comuna,direccion FROM empresa";
  23.             ds = sql.ExecuteQuery();
  24.             if (ds != null)
  25.             {
  26.                 foreach (DataRow dr in ds.Tables[0].Rows)
  27.                 {
  28.                     emp = new Empresa();
  29.                     emp.Nombre = dr.ItemArray[0].ToString();
  30.                     emp.Ciudad = dr.ItemArray[1].ToString();
  31.                     emp.Comuna = dr.ItemArray[2].ToString();
  32.                     emp.Direccion = dr.ItemArray[3].ToString();
  33.                     le.Add(emp);
  34.                     emp = null;
  35.                 }
  36.                 return le;
  37.             }
  38.             else
  39.             {
  40.                 return null;
  41.             }
  42.         }
  43.  
  44. //.........

InsertarTrabajador.aspx.cs
Código C#:
Ver original
  1. protected void Page_Load(object sender, EventArgs e)
  2.     {
  3.         EmpresaADO eado = new EmpresaADO();
  4.         List<Empresa> le = new List<Empresa>();
  5.         le = eado.ListarEmpresa();
  6.         if (le != null && le.Count > 0)
  7.         {
  8.             foreach (Empresa emp in le)
  9.             {
  10.                 ddlEmpresa.Items.Add(new ListItem(emp.Nombre, emp.IdEmpresa.ToString()));
  11.             }
  12.         }
  13.         else
  14.         {
  15.             ddlEmpresa.Items.Insert(0, "No hay empresas");
  16.         }
  17.     }

Pero siempre me tira el mismo error :

Código:
Detalles  de la excepción: System.NullReferenceException: Referencia a objeto  no establecida como instancia de un objeto.

EmpresaADO eado = new EmpresaADO();
Línea 21:         List<Empresa> le = new List<Empresa>();
Línea 22:         le = eado.ListarEmpresa();
Línea 23:         if (le != null && le.Count > 0)
Línea 24:         { 
El método no causa problemas en sí, funciona bien, datos existen en la tabla ( solo 1 ), pero no quiere nada.... no quiere funcionar, a esta hora ya no doy más...

No me escriban la solución, solo díganme donde me equivoco, que no lo veo .
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #2 (permalink)  
Antiguo 25/05/2010, 21:45
Avatar de gedarufi  
Fecha de Ingreso: diciembre-2008
Ubicación: Colombia
Mensajes: 540
Antigüedad: 16 años
Puntos: 22
Respuesta: Referencia a objeto no establecida como instancia de un objeto. C#.

Según alcanzo a ver tu error se genera en esta linea
Código C#:
Ver original
  1. foreach (DataRow dr in ds.Tables[0].Rows)

Ahora por que?, muy sencillo... en la declaración del DataSet debes de agregarle un DataTable.

Saludos
  #3 (permalink)  
Antiguo 26/05/2010, 00:52
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 11 meses
Puntos: 606
Respuesta: Referencia a objeto no establecida como instancia de un objeto. C#.

Yo veo complicado encontrar el error sin saber la implementación de la clase DALSQLServer, ya que hace una cosa rara, asigna el resultado de ExecuteQuery (de su clase) a un DataSet... Sin saber que hace ahí dentro no se puede dar más datos.

También aconsejaría meter captura de excepciones y así sabrias, dentro de ListarEmpresas, que linia en concreto está petando. Eso o depurar poniendo un punto de interrupción en la función. Con eso acabarías encontrando el error en unos minutos.
__________________
Aviso: No se resuelven dudas por MP!
  #4 (permalink)  
Antiguo 26/05/2010, 12:20
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 21 años
Puntos: 89
Respuesta: Referencia a objeto no establecida como instancia de un objeto. C#.

Perdón, pensé que con ese código sería suficiente. Aquí está el DALSQLServer.cs

Código C#:
Ver original
  1. namespace Tarea.Capas.CapaAccesoDatos
  2. {
  3.     /// <summary>
  4.     /// Descripción breve de DALSQLServer
  5.     /// </summary>
  6.     public class DALSQLServer
  7.     {
  8.         private String _connectionString;
  9.         private String _sqlCommand;
  10.         SqlConnection objetoConnection;
  11.         SqlCommand objetoCommand;
  12.         /// <summary>
  13.         /// Obtiene o establece el comando que se ejecutará sobre una tabla
  14.         /// </summary>
  15.         public String SqlCommand
  16.         {
  17.             get { return _sqlCommand; }
  18.             set { _sqlCommand = value; }
  19.         }
  20.         /// <summary>
  21.         /// Se especifica la cadena de conexión a la base de datos
  22.         /// </summary>
  23.         public String ConnectionString
  24.         {
  25.             get { return _connectionString; }
  26.             set { _connectionString = value; }
  27.         }
  28.         /// <summary>
  29.         /// Ejecuta comandos INSERT, UPDATE y DELETE
  30.         /// </summary>
  31.         /// <returns>Retorna la cantidad de filas afectadas</returns>
  32.         public int ExecuteNonQuery()
  33.         {
  34.             int iResultado = 0;
  35.             if (objetoConnection == null)
  36.                 objetoConnection = new SqlConnection();
  37.             try
  38.             {
  39.                 objetoConnection.ConnectionString = _connectionString;
  40.                 objetoConnection.Open();
  41.                 if (objetoConnection.State == ConnectionState.Open)
  42.                 {
  43.                     objetoCommand = new SqlCommand();
  44.                     objetoCommand.Connection = objetoConnection;
  45.                     objetoCommand.CommandType = CommandType.Text;
  46.                     objetoCommand.CommandText = _sqlCommand;
  47.                     iResultado = objetoCommand.ExecuteNonQuery();
  48.                 }
  49.             }
  50.             catch (Exception ex)
  51.             {
  52.                 iResultado = -1;
  53.             }
  54.             finally
  55.             {
  56.                 //si el estado de conexión es open, cierra la conexión
  57.                 if (objetoConnection.State == ConnectionState.Open)
  58.                     objetoConnection.Close();
  59.  
  60.                 objetoConnection = null;
  61.                 objetoCommand = null;
  62.             }
  63.  
  64.  
  65.  
  66.  
  67.             return iResultado;
  68.         }
  69.         /// <summary>
  70.         /// Ejecuta consultas SELECT
  71.         /// </summary>
  72.         /// <returns></returns>
  73.         public DataSet ExecuteQuery()
  74.         {
  75.             DataSet ds = new DataSet();
  76.             SqlDataAdapter objetoAdapter = null;
  77.             if (objetoConnection == null)
  78.                 objetoConnection = new SqlConnection();
  79.             try
  80.             {
  81.                 objetoConnection.ConnectionString = _connectionString;
  82.                 objetoConnection.Open();
  83.                 if (objetoConnection.State == ConnectionState.Open)
  84.                 {
  85.                     objetoAdapter = new SqlDataAdapter();
  86.                     objetoCommand = new SqlCommand();
  87.                     objetoCommand.Connection = objetoConnection;
  88.                     objetoCommand.CommandType = CommandType.Text;
  89.                     objetoCommand.CommandText = _sqlCommand;
  90.                     objetoAdapter.SelectCommand = objetoCommand;
  91.                     objetoAdapter.Fill(ds);
  92.                 }
  93.             }
  94.             catch (Exception ex)
  95.             {
  96.                 ds = null;
  97.             }
  98.             finally
  99.             {
  100.                 //si el estado de conexión es open, cierra la conexión
  101.                 if (objetoConnection.State == ConnectionState.Open)
  102.                     objetoConnection.Close();
  103.  
  104.                 objetoConnection = null;
  105.                 objetoCommand = null;
  106.             }
  107.             return ds;
  108.         }
  109.  
  110.         /// <summary>
  111.         /// Constructor de la clase
  112.         /// </summary>
  113.         public DALSQLServer()
  114.         {
  115.             _connectionString = "";
  116.             _sqlCommand = "";
  117.             objetoConnection = null;
  118.             objetoCommand = null;
  119.         }
  120.  
  121.         public DALSQLServer(String connectionString,String sqlComand)
  122.         {
  123.             _connectionString = connectionString;
  124.             _sqlCommand = sqlComand;
  125.             objetoConnection = null;
  126.             objetoCommand = null;
  127.         }
  128.     }
  129. }

Con respecto al punto de interrupción, lo marco, apreto la flecha en modo debug, y me dice que el código fuente original es distinto, así que no se detiene en el breakpoint, y me tira el error -.-.

Con respecto al DataTable, tengo otro ejemplo funcional, en el cual uso la misma forma de devolver los datos del tipo List<> sin DataTable, y nunca me lanzó ese error... He visto aquel ejemplo, y tengo prácticamente lo mismo... Quizá la consulta no se está ejecutando y me devuelve nulo... Pero la verdad no lo sé...

Agradezco sus respuestas, seguiré intentando.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #5 (permalink)  
Antiguo 26/05/2010, 12:49
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 21 años
Puntos: 89
Respuesta: Referencia a objeto no establecida como instancia de un objeto. C#.

Ufffffffffffffff...

Seré tonto...

Era el nombre de la tabla... tenía un script que la creaba, y no me percaté que el nombre era distinto al de la consulta select. Lo cambié, actualicé las referencias, y ahora funciona bien.

Lamento haberles hecho perder el tiempo.

Gracias a ambos :).
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.

Etiquetas: establecida, instancia, objeto, referencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:35.