La Web del Programador: Comunidad de Programadores
 
    Pregunta:  46079 - ERROR AL CARGAR IMAGEN DE UNA BASE DE DATOS
Autor:  Andrés González Tenorio
He estado intentando llamar una imagen de una base de datos y he seguido al pie de la letra:

Dim strCn As String = "workstation id=AGONZALEZT;packet size=4096;user id=sa;data source=ODISEO;persist security info=False;initial catalog=Northwind"
Dim cn As New SqlConnection(strCn)
Dim cmd As New SqlCommand("SELECT * " & _
"FROM Categories", cn)
Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet
da.Fill(ds, "Categories")
Dim c As Integer = ds.Tables("Categories").Rows.Count
If c > 0 Then
MsgBox("OK")
Dim bytBLOBData As Byte() = ds.Tables("Categories").Rows(c - 1)("Picture")
Dim stmBLOBData As New MemoryStream(bytBLOBData)
pbFoto.Image = Image.FromStream(stmBLOBData)
End If

Pero me da un error exactamente en esta linea:

pbFoto.Image = Image.FromStream(stmBLOBData)

El error dice: "arámetro utilizado no valido"

Mi pregunta es ¿Que diablos estoy haciendo mal?

  Respuesta:  Sergio Antonio Caicedo Mora
Este codigo me sirve con ODBC, MySQL y VS2008. Puedes adaptarlo. Me valgo de un PictureBox para guardar la imagen en un archivo al final.

'El campo FOTO de la tabla imagenes es tipo BLOB
'Buscas el Campo FOTO, al final obtienes algo que sera como:
'ROW.Item("FOTO") ó RDT.ROW(i).Item("FOTO")
'o segun veo en tu ejemplo.
ds.Tables("imagenes").Rows(i)("FOTO") (No trabajo de esta manera, pero creo que sería algo así)

'***************************************************
Dim IMGbyte() As Byte
CAD = "SELECT FOTO FROM imagenes WHERE Id=" & IdIMAGE
IMGbyte = CType(ROW.Item("FOTO"), Byte())
Dim MS As New System.IO.MemoryStream(IMGbyte)
PB.Image = System.Drawing.Image.FromStream(MS)
PB.Image.Save("C:Imagen.jpg")
'****************************************************

Espero te sirva de ayuda. Aunque el foro no pone fechas y no se cuanto tiempo tenga esa pregunta.

  Respuesta:  German Lucero
Andres:

El codigo no esta del todo mal, si medio confuso.
Antes que nada siempre es bueno tener un codigo legible y comprensible.
Un pequeño tip es ponerle Nombres a las Variables que sean identificables facilmente. jeje, te lo digo x exp, por que dentro de 3 meses no vas a entender ni tu propio codigo.:P.
Bueno .llendo al problema. recomiendo que te fijes bien el tipo de variable que estas utilizando para asignar la imagen, a mi gusto no creo que sea el mejor metodo este... dejas de tener poder sobre la imagen y haces depender la imagen de tu base de datos, que si algun dia se rompe..vas a perder TODO.
Por un control tuyo mas seguro, recomiendo que las imagenes las guardes en algun recurso de tu disco, con nombres identificables, para que luego en la base tengas alguna tabla con el PATHIMAGEN y el NOMBREIMAGEN para si cargarlas desde el disco con un picturebox por ejemplo....

Espero averte ayudado en algo con mis recomendaciones.SUERTE!!

German Lucero