Principales respuestas
Ayuda con consulta sql en c#

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; } }
- Editado FelixElGato17 domingo, 11 de marzo de 2018 20:40
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
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
-
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
-
-