Mostrar imagen de SQL Server en ASP.NET

publicado por: Anonymous

Tengo una tabla en SQL Server en la cual agrego una imagen tipo varbinary(max) de la siguiente manera:

con.Open();
string query = "INSERT INTO TablaUser (Nombre, Edad, Correo, Imagen)
values (@Nombre, @Edad, @Correo, @Imagen)";
using (SqlCommand command = new SqlCommand(query, con))
{
command.Parameters.AddWithValue("@Nombre", nomp.Text);
command.Parameters.AddWithValue("@Edad", edad.Text);
command.Parameters.AddWithValue("@Correo", mail.Text);
if (FileUpload1.HasFile)
{
byte[] input = FileUpload1.FileBytes;
command.Parameters.AddWithValue("@Imagen", input);
}
command.ExecuteNonQuery();
con.Close();

Ahora lo que necesito es recuperar esa imagen y mostrarla en un:

<asp:Image ID="Image1" runat="server"/>

Este es mi código, no marca error pero no muestra la imagen:

con.Open();
string query = "SELECT Imagen FROM TablaUser where IdSolicitud=" + idSolicitud + "";
SqlCommand cm = new SqlCommand(query, con);
cm.CommandTimeout = 0;
byte[] img = (byte[])cm.ExecuteScalar();
System.Drawing.Image rImage = null;
using (MemoryStream ms = new MemoryStream(img))
{
rImage = System.Drawing.Image.FromStream(ms);
Image1.ImageUrl = "data:image/jpg;base64," + Convert.ToBase64String(img);
}
con.Close();

introducir la descripción de la imagen aquí

Imagen varbinary(max)

solución

Haber, el fragmento de código que tienes debe de funcionar.

Prueba validando que por lo menos el array de bytes tiene información.

string query = "SELECT Imagen FROM TUsers where IdSolicitud=" + idSolicitud + "";
SqlCommand cm = new SqlCommand(query, con);
cm.CommandTimeout = 0;

byte[] img = (byte[])cm.ExecuteScalar();

if (img != null && img.Length > 0)
{
    Image1.ImageUrl = "data:image;base64," + Convert.ToBase64String(img);
}

Nota:

También te aconsejo que revises si de verdad el array de bytes que obtienes es una imagen en si, de lo contrario no mostrara nada.


Si sigues teniendo el problema entonces créate un proyecto a parte el cual vas a utilizar de pruebas. Agregas un control Image y haces lo siguiente en el Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
    string path = Server.MapPath("ruta_imagen");
    byte[] img = File.ReadAllBytes(path);
    Image1.ImageUrl = "data:image;base64," + Convert.ToBase64String(img);
}

ruta_imagen debes colocar la ruta de cualquier imagen que agregues al proyecto incluyendo la extensión.

Con este proyecto de pruebas que harás te debe de cargar la imagen en base 64, así saldrás de duda.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *