none
Ayuda con consulta sql en c# RRS feed

  • Pregunta

  • Tengo una base de datos donde una columna es para almacenar imagenes, entonces quiero de alguna forma obtener ese dato y saber si es nulo o no, en caso de que sea nulo quiero agregarle la imagen (Esto ya lo tengo) y si no es nulo quiero mostrar su contenido (Ya lo tengo), lo unico que necesito es hacer el if (imagen ya tiene un dato) o if (imagen no tiene nada). Esto es lo que uso para ver la imagen: 

    private void BtnImagen_Click(object sender, EventArgs e)
            {
                Conexion.Open();
                SqlCommand cmd = new SqlCommand("Select Imagen from Alumnos where Nombre = @Nombre", Conexion);
                SqlParameter Nom = new SqlParameter("Nombre", SqlDbType.NVarChar);
                cmd.Parameters.Add(Nom);
                Nom.Value = Nombre;
                SqlDataReader SDR = cmd.ExecuteReader();
                SDR.Read();
                if (SDR.HasRows)
                {
                        byte[] imagen = ((byte[])SDR[0]);
    
                    if (imagen == null)
                    {
                        pictureBox1.Image = null;
                    }
                    else
                    {
                        MemoryStream MS = new MemoryStream(imagen);
                        pictureBox1.Image = Image.FromStream(MS);
                    }
                }
                else
                {
                    MessageBox.Show("Error(Prueba)");
                }
                Conexion.Close();
            }

    Y este es para guardarla:

    private void Guardar_Click(object sender, EventArgs e)
            {
                byte[] imagen = null;
                FileStream FS = new FileStream(LocImg, FileMode.Open, FileAccess.Read);
                BinaryReader BR = new BinaryReader(FS);
                imagen = BR.ReadBytes((int)FS.Length);
    
                Conexion.Open();
                SqlCommand cmdo = new SqlCommand("update Alumnos Set [IMAGEN] = @IMAGEN where nombre = @Nombre", Conexion);
                SqlParameter Img = new SqlParameter("IMAGEN", SqlDbType.Image);
                SqlParameter Nom = new SqlParameter("Nombre", SqlDbType.NVarChar);
                cmdo.Parameters.Add(Img);
                cmdo.Parameters.Add(Nom);
                Img.Value = imagen;
                Nom.Value = FormPrincipal.NombreG;
                int N = cmdo.ExecuteNonQuery();
                Conexion.Close();
                if (N == 1)
                {
                    MessageBox.Show("Imagen agregada correctamente");
                    Close();
                }
                else
                {
                    MessageBox.Show("Hubo un error al agregar la imagen");
                }
                LocImg = "";
            }
            string LocImg;
            private void BtnCargarImg_Click(object sender, EventArgs e)
            { 
                OpenFileDialog OFD = new OpenFileDialog();
                OFD.Filter = "png files(*.png)|*.png|jpg files(*.jpg)|*.jpg";
                if (OFD.ShowDialog() == DialogResult.OK)
                {
                    LocImg = OFD.FileName.ToString();
                    pictureBox1.ImageLocation = LocImg;  
                }
            }


    domingo, 11 de marzo de 2018 20:35

Respuestas

  • Buenas,

    Una DB no te retorna "null", retorna "DbNull.Value", prueba haciéndolo asi:

    if (SDR[0] == DBNull.Value)
    {
        pictureBox1.Image = null;
    }
    else
    {
        MemoryStream MS = new MemoryStream(SDR[0]);
        pictureBox1.Image = Image.FromStream(MS);
    }
    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta FelixElGato17 domingo, 11 de marzo de 2018 22:09
    domingo, 11 de marzo de 2018 21:15

Todas las respuestas

  • Buenas,

    Una DB no te retorna "null", retorna "DbNull.Value", prueba haciéndolo asi:

    if (SDR[0] == DBNull.Value)
    {
        pictureBox1.Image = null;
    }
    else
    {
        MemoryStream MS = new MemoryStream(SDR[0]);
        pictureBox1.Image = Image.FromStream(MS);
    }
    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta FelixElGato17 domingo, 11 de marzo de 2018 22:09
    domingo, 11 de marzo de 2018 21:15
  • No es necesario hacer SDR.Read() para luego hacer if (SDR.HasRows).  Puede unir ambos:  if (SDR.Read()).

    using (SqlDataReader SDR = cmd.ExecuteReader())
    {
        if (SDR.Read())
        {
            //Si el valor es nulo en base de datos, la sentencia que usted tiene
            //fallará con invalid cast.
            object imagen = SDR[0];
            if (imagen == DbNull.Value)
            {
                pictureBox1.Image = null;
            }
            else
            {
                MemoryStream ms = new MemoryStream((byte[])imagen);
                ...
            }
        }
        else
        {
            ...
        }
        ...
    }
    

    Para guardar el asunto es más fácil.  Solamente haga el mismo SELECT que hace en el botón de mostrar, y si la imagen es igual a DbNull.Value entonces no hay imagen y procede a guardar una.  Sin embargo, en lo personal puede hacerse más fácilmente:  Si hace la consulta SELECT para saber si hay imagen guardada durante el Form_Load, puede deshabilitar el botón de Guardar si ya hay imagen.  Entonces no ocupa cambiar el código de ese botón y ya.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta FelixElGato17 domingo, 11 de marzo de 2018 22:09
    • Desmarcado como respuesta FelixElGato17 domingo, 11 de marzo de 2018 22:09
    domingo, 11 de marzo de 2018 21:17
    Moderador
  • Gracias por notar ese error y hacermelo saber pero no vengo por eso, yo lo que quiero saber es como saber si mi columna imagenes contiene un valor, esto lo necesito para mostrar la imagen que contiene o en caso contrario agregarla
    domingo, 11 de marzo de 2018 21:55
  • Muchas gracias, me funciono lo de SDR[0] == DBNull.value para lo que necesitaba
    domingo, 11 de marzo de 2018 22:10