none
IMAGENES CON VALOR NULO ? RRS feed

  • Pregunta

  • Hola comunidad, TENGO UN PROBLEMA CON LAS IMAGENES DE TIPO NULL, MIS CLASES SON LAS SIGUIENTES, USO VS2005:

    ENTIDAD

    namespace
    CapaEntidades { public class Empleado { private Int32 codigo; private string nombre; private string apellido; private Int32 estado; private byte[] imagen; private DateTime fechanac; public Int32 Codigo { get { return codigo; } set { codigo = value; } } public string Nombre { get { return nombre; } set { nombre = value; } } public string Apellido { get { return apellido; } set { apellido = value; } } public Int32 Estado { get { return estado; } set { estadocivil = value; } } public byte[] Imagen { get { return imagen; } set { imagen = value; } } public DateTime Fechanac { get { return fechanac; } set { fechanac = value; } } public Contacto(Int32 codigo, string nombre, string apellido, DateTime fechanacimiento, Int32 estado, byte[] imagen) { this.Codigo = codigo; this.Nombre = nombre; this.Apellido = apellido; this.Fechanac = fechanac; this.Estado = estado; this.Imagen = imagen; } public Empleado() { } }

    DATOS

    namespace CapaDatos { public class EmpleadoDatos { public List<Empleado> GetAll() { List<Empleado> oListaEmpleado= new List<Empleado>(); using (SqlConnection conexion = new SqlConnection(ClsConexion.MyConexionGenerica())) { try { SqlCommand comando = new SqlCommand("Select IdEmpleado, Nombre, Apellido, FechaNacimiento, Estado, Imagen From Empleados", conexion); conexion.Open(); SqlDataReader reader = comando.ExecuteReader(); while (reader.Read()) { Empleado oEmpleado = new Empleado(); oEmpleado.Codigo = Convert.ToInt32(reader.GetValue(0)); oEmpleado.Nombre = reader.GetValue(1).ToString(); oEmpleado.Apellido = reader.GetValue(2).ToString(); oEmpleado.Fechanac = Convert.ToDateTime(reader.GetValue(3)); oEmpleado.Estado = Convert.ToInt32(reader.GetValue(4)); if (reader["Imagen"] != DBNull.Value) oEmpleado.Imagen = (byte[])reader["Imagen"]; oListaEmpleado.Add(oEmpleado); } conexion.Close(); } catch (Exception ex) { //Si hubo algun error global::System.Windows.Forms.MessageBox.Show("Error de conexion"); } } return oListaEmpleado; } }

    NEGOCIO

    public class EmpleadoNegocio { public List<Empleado> ListadoEmpleado() { List<Empleado> oListaEmpleado ; EmpleadoDatos oCapaDatos = new EmpleadoDatos (); oListaEmpleado = oCapaDatos.GetAll(); return oListaEmpleado ; } }


    PRESENTACION

    private void frmContactos_Load(object sender, EventArgs e) { this.dataGridView1.DataSource = oEmpleadoNegocio.ListadoEmpleado(); }

    El problema se va que cuando muestro los datos en el DataGridView, estos no aparecen, salvo cuando quito
    las siguientes 2 lineas de la CAPA DE DATOs:

    if (reader["Imagen"] != DBNull.Value) oEmpleado.Imagen = (byte[])reader["Imagen"];

    En ese caso si me devuelven datos en el DataGridView, pero en todos los registro del campo "IMAGEN" se
    ve una "X" roja, es decir eso se veria si todos fuesen nulos, pero no todos son nulos, pero apesar de eso
    me muestra como si todos lo fuesen.

    Entonces que deberia hacer para poder listar las imagenes apesar que estas contengan nulos y no afecte
    los demas datos que SI TENGAN UNA IMAGEN, APARTE DE ELLO como aplicar un dato nulo a mi campo
    Imagen de mi capa entidad, ya que es de tipo Byte[], y no funciona el "byte[]?", entonces ??

    Espero puedan darme algunas ideas!!

    GRACIAS POR SU TIEMPO SEÑORES!!!

    sábado, 21 de mayo de 2011 17:21

Respuestas

  • Así a ojo lo que haces está bien hecho y debería funcionar. No resulta obvio dónde puede estar el error. Tendrás que seguir la ejecución del código paso a paso con el depurador desde Visual Studio, examinando en cada paso el valor de las variables y el sitio por donde sigue la ejecución del código, hasta que localices el sitio exacto donde los resultados no son los esperados. Con esa información, se puede seguir indagando a ver qué es lo que sucede.

     

    APARTE DE ELLO como aplicar un dato nulo a mi campo Imagen de mi capa entidad, ya que es de tipo Byte[], y no funciona el "byte[]?",


    No tiene ningún sentido lo de "byte[]?". Esto se hace con los tipos-valor, que en principio no admiten "null", para conseguir de esa manera poder meterles un "null". Pero los tipos-referencia, como por ejemplo los arrays, incluyendo el byte[], ya aceptan de por sí mismos el valor null, luego no tiene sentido añadirles la ? para tratar de convertirlos en Nullable. Al byte[] le puedes asignar directamente un null así:

    oEmpleado.Imagen = null;

     

     


    • Marcado como respuesta harol samdun sábado, 21 de mayo de 2011 18:16
    sábado, 21 de mayo de 2011 18:05
  • GRACIAS, PERO YA PUDE SOLUCIONARLO, NO SE QUE SUCEDIO, VOLVI A EJECUTAR Y AHORA SI LO MOSTRO, APESAR NO QUE HICE NINGUN CAMBIO!!!

    GRACIAS!!

    • Marcado como respuesta harol samdun sábado, 21 de mayo de 2011 18:16
    sábado, 21 de mayo de 2011 18:15

Todas las respuestas

  • Así a ojo lo que haces está bien hecho y debería funcionar. No resulta obvio dónde puede estar el error. Tendrás que seguir la ejecución del código paso a paso con el depurador desde Visual Studio, examinando en cada paso el valor de las variables y el sitio por donde sigue la ejecución del código, hasta que localices el sitio exacto donde los resultados no son los esperados. Con esa información, se puede seguir indagando a ver qué es lo que sucede.

     

    APARTE DE ELLO como aplicar un dato nulo a mi campo Imagen de mi capa entidad, ya que es de tipo Byte[], y no funciona el "byte[]?",


    No tiene ningún sentido lo de "byte[]?". Esto se hace con los tipos-valor, que en principio no admiten "null", para conseguir de esa manera poder meterles un "null". Pero los tipos-referencia, como por ejemplo los arrays, incluyendo el byte[], ya aceptan de por sí mismos el valor null, luego no tiene sentido añadirles la ? para tratar de convertirlos en Nullable. Al byte[] le puedes asignar directamente un null así:

    oEmpleado.Imagen = null;

     

     


    • Marcado como respuesta harol samdun sábado, 21 de mayo de 2011 18:16
    sábado, 21 de mayo de 2011 18:05
  • @Alberto,  Gracias por la aclaracion de los tipos nulos, seguire luchando!!!
    sábado, 21 de mayo de 2011 18:11
  • GRACIAS, PERO YA PUDE SOLUCIONARLO, NO SE QUE SUCEDIO, VOLVI A EJECUTAR Y AHORA SI LO MOSTRO, APESAR NO QUE HICE NINGUN CAMBIO!!!

    GRACIAS!!

    • Marcado como respuesta harol samdun sábado, 21 de mayo de 2011 18:16
    sábado, 21 de mayo de 2011 18:15