Almacenar y Mostrar Imágenes [Vb.Net & SQL SERVER]

Hola De Nuevo ahora haremos un ejemplo simple Para Almacenar imágenes en nuestro servidor de base de datos Desde un formulario en el lenguaje desde visual basic.net

Para Esto Utilizaremos :

  • 4 Button
    • Un Button Para Buscar La Imagen
    • Un Button Para Guardar La Imagen En La Base De Datos
    • Un Button Para Visualizar Las Imágenes Guardadas En La Base De Datos
    • Un Button Para Ocultar Las Imágenes Almacenadas En La Base De Datos
  • 1 OpenFileDialog1
    • Un OpenFileDialog Para Seleccionar Nuestra Imagen A Almacenar
  • 1 DataGridView
    • Un DataGridView Para Mostrarnos los datos De La Base De Datos
  • 1 PictureBox
    • Un PictureBox Donde Nos Mostrara Y Nos Dara Una vista Previa De las Imágenes.
  • 1 Label
    • Un Label Para Mostrarlos La Ruta Donde se encuentra la imagen

Bueno Con Estos Controles Crearemos Un Diseño Algo Así.

Y Bueno Ahora Para El Ejemplo Crearemos Una Base De Datos Para Este Ejemplo:

Create Database TechPeru
Go
Use TechPeru
Go
Create Table AlmacenarImagenes(
Id int primary key identity(0,1),
Imagen Image
)

Ahora El Codigo Fuente

Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Public Class Form1
 Dim Str As String = "Data Source=.;Initial Catalog=TechPeru;Integrated Security=True"
 Dim Da As New SqlDataAdapter
 Dim Dt As DataTable
 Dim Cn As New SqlConnection(Str)
 Dim Cmd As New SqlCommand
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 Me.Size = New System.Drawing.Size(396, 412)
 DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
 OpenFileDialog1.Filter = "Todos(*.Jpg, *.Png, *.Gif, *.Tiff, *.Jpeg, *.Bmp)|*.Jpg; *.Png; *.Gif; *.Tiff; *.Jpeg; *.Bmp"
 End Sub
 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
 Me.Size = New System.Drawing.Size(396, 412)
 End Sub
 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
 Me.Size = New System.Drawing.Size(396, 591)
 Try
 Cn.Open()
 With Cmd
 .CommandType = CommandType.Text
 .CommandText = "SELECT * from AlmacenarImagenes"
 .Connection = Cn
 End With
 With Da
 .SelectCommand = Cmd
 Dt = New DataTable
 .Fill(Dt)
 DataGridView1.DataSource = Dt
 End With
 Catch ex As Exception
 MsgBox(ex.Message)
 Finally
 Cn.Close()
 End Try
 End Sub
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 OpenFileDialog1.ShowDialog()
 Label1.Text = OpenFileDialog1.FileName.ToString
 PictureBox1.Image = System.Drawing.Image.FromFile(Label1.Text)
 End Sub
 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
 Try
 Cn.Open()
 Dim arrFilename() As String = Split(Text, "\")
 Array.Reverse(arrFilename)
 Dim ms As New MemoryStream
 PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
 Dim arrImage() As Byte = ms.GetBuffer
 With Cmd
 .CommandType = CommandType.Text
 .CommandText = "Insert Into AlmacenarImagenes(Imagen)Values(@Imagen)"
 .Connection = Cn
 .Parameters.Add(New SqlParameter("@Imagen", SqlDbType.Image)).Value = arrImage
 End With
 MessageBox.Show("Registrado Correctamente")
 Cmd.ExecuteNonQuery()
 Catch ex As Exception
 MsgBox(ex.Message)
 Finally
 Cmd.Parameters.Clear()
 Cn.Close()
 End Try
 End Sub
 Function ExtraerImagen(ByVal Foto As Integer) As Byte()
 With Cmd
 .CommandType = CommandType.Text
 .CommandText = "Select Imagen From AlmacenarImagenes Where id = " & Foto
 .Connection = Cn
 End With
 With Cn
 .Open()
 Dim MyPhoto() As Byte = CType(Cmd.ExecuteScalar(), Byte())
 .Close()
 Return MyPhoto
 End With
 End Function
 Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
 Try
 Dim ms As New MemoryStream(ExtraerImagen(CInt(DataGridView1.SelectedCells(0).Value)))
 PictureBox1.Image = Image.FromStream(ms)
 Catch ex As Exception
 MessageBox.Show(ex.Message)
 End Try
 End Sub
End Class

Y Un Video De Muestra

Espero Que Les Sirva este Ejemplo Comenten Y Punteen!! 😀 Gracias Se Aceptan Sugerencias!!

57 Respuestas a “Almacenar y Mostrar Imágenes [Vb.Net & SQL SERVER]

      • una pregunta porfavorrrr este campo “ID” ME gustaria ponerle “CODIGO” y que sea de tipo alfanumérico por ejemplo “EMP001″ Pero cada vez que lo intento me sale error por favor ayúdame… este proyecto lo debo presentar de aki a 4 diasss y quiero insertar una imagen pero no puedoooo… o si tienes otro método para insertar una imagen de vb.net 2008 a sql 2008 plisss ayudenmee…….ia no se k hacerrr 😦

  1. Hola amigo…estos tutoriales son geniales…desde paraguay te saluda Hugo Caballero…si tenes la posibilidad de alzar un tuto de como hacer un informe con parametros de fechas. ej. desde tal fecha hasta tal fecha…

  2. HEy men que tal tus tutoriales estan increibles de 100%% estaria maravilloso que unieras tus codigps es decir hacer un BD en SQL server y VB.NET que agregara registros desde vb.net igual agregara una foto referente a lo que se registro en VB.NET y al realizar la busqueda rapida o filtrado de datos mientras se escribe algun dato te lo busque inmediatamente y te coloque la foto de quien es como el regitro para una escuela nombre,apellido,edad, FOTO, y asi agilizar la busqueda de ese regitro mientras se escribe a quien quiero buscar filtado de datos con el ya conocido comando ‘LIKE’ seguramente lo debes de conocer estaria supermegaincreible que hicieras eso estaria de 100000%%% espero me reposndas men saludos XD….:)…..XD algo parecido como lo ke esta en este video de este link ::: http://www.youtube.com/watch?v=rIxHIzuvFnY

  3. HOLA tu tutoriales esta extraordinarios estaria inclreible que hicierN UN BD EN SQL Server y VB.NET que agregara registros e imagenes como por ejemplo de una escuela que agregara desde VB.NET nombre,apellido,edad,FOTO etc y que lo guardar en la BD DE SQL SERVER y que al momemto de consulata o buscar algun registro lo hiciera mientras escribo basado en enl comando ‘LIKE’ que creo ya conoces filtado de datos o busqueda rapida mientras escribes estari sorprendente XD…:) algo parecido a lo ke esta en este video de este link….::: http://www.youtube.com/watch?v=rIxHIzuvFnY

    saludos espero me respondas men¡¡¡¡¡¡¡¡

  4. Ya he usado este codigo, pero el campo de la imagen se queda en blanco, no nulo, sino vacio, no muestra ningun error y guarda perfecto los demas campos de la tabla, menos la imagen… Estoy usando VB 2005 y SQL server EXPRESS 2005, tendrá algo que ver? Help me.

  5. Mejor explicame para que sirven estas lineas:

    Dim arrFilename() As String = Split(Text, «\»)
    Array.Reverse(arrFilename)
    Dim ms As New MemoryStream
    PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
    Dim arrImage() As Byte = ms.GetBuffer

    Las entiendo, digamos superficialmente… noc si me entiendas..
    Como se si realmente me esta almacenando algo??
    Para que es el array.reverse?

    • Que tal Luis Batista, primeramente agradezco tu codigo, lo he probado y funciona bien, pero tengo duda: las lineas

      Dim arrFilename() As String = Split(Text, «\»)
      Array.Reverse(arrFilename)

      creo no se usan en el codigo, las elimine y sigue funcionando, esto es correcto ??

      en respuesta a la duda del amigo anonimo:

      Dim ms As New MemoryStream
      PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
      Dim arrImage() As Byte = ms.GetBuffer

      estas lineas crean un espacio de memoria que sirve para guardar temporalmente la imagen del picturebox en byte, para posteriormente grabarla.

      saludos y espero puedas reponder a mi duda.
      Jose Luis

      P.D. como te puedo puntear ??

      • Holq Que tal como estas espero poder solucionar tus dudas buenoo…
        La Linea
        Dim arrFilename() As String = Split(Text, “\”)
        Array.Reverse(arrFilename)
        Esta DeMas es que como tenia un ejemplo de estos en otro formulario… No tiene nada k ver en el ejemplo
        Es Correcto Lo Que Tu Dices De las Lineas
        Dim ms As New MemoryStream
        PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
        Dim arrImage() As Byte = ms.GetBuffer
        Basicamente!! Vuelve La Imagen que se guarda en el picturebox en tipo byte para asi almacenar en la bd que tiene el campo byte!!

  6. Gracias por el aporte pero podrias explicarme o pasarme el codigo de como puedo llevarlo a asp.net utilizando el mismo vb.net porfavor … gracias!

    • El Código Esta Ahí Y Si Lo Kieres Llevar A Asp.Net Bueno El Procedimiento Es Parecido!! No Lo Eh Intentado Aun Pero Debe Ser!! Gracias Pero T Mandare El Codigo Fuente Saludos Y Gracias !!

  7. Que tal Luis, tengo una duda, usando este mismo ejemplo, veo que las imagenes del datagridview se ven pequeñas al tamaño del renglon.

    Tu sabes como se puede hacer para que las imagenes del datagridview se muestren en un tamaño determinado dentro del datagridview ??
    hay alguna propiedad stretch o algo asi ??.

    De antemano muchas gracias por tu apoyo.
    Saludos
    Jose Luis

      • Que tal Luis, Agradezco atencion y tus comentarios. Respecto al Datagridview y las imagenes, de momento lo he solucionado agrandando los renglones desde las propiedades del modo de diseño y ademas hice una rutina para cargar una imagen en un picturebox y despues grabarla en un nuevo archivo con las dimensiones que requiero para la presentacion del datagridview, por lo que ahora todas las imagenes son del mismo tamaño y se presentan correctamente.

        Agradezco tu apoyo y bueno si en algo puedo ayudar, aqui estare al pendiente. Saludos y nuevamente gracias.

  8. Hola oye una pregunta no tienes un codigo para escanear en visual basic 10.net, estoy batallando mucho y aque no hay muchas aplicaciones para este lenguaje

    Mire unos tutoriales y en ellos aparece una biblioteca que se llama twainHandler.vb de casualidad no la tendras

    espero verme favorecido en tu respuesta

  9. bakan esta saludos quisiera saber como diablos guardo la informacion completa que se carga en el fileupload en la base de datos y luego la presento paso a paso soy novato en esto…………

  10. Hola buenas noche recien descubro su pagina y muy buena de verdad felicitaciones ahora lo que quisiera saber si pudieran hacerlo es como almacenar o sea un mantenimeinto completo con imagenes pero con procedimientos almacenados , se como hacer mantenimeinto insertar actualizar, eliminar datos con Procedures pero a esos procedures incluri imagenes

  11. Hola Hugo muy interesante el tutorial pero cuando lo ejecuto me dice que es imposible convertir un entero en byte
    Dim ms As New MemoryStream(ExtraerImagen(CInt(DataGridView1.SelectedCells(0).Value)))trabajo con sqlserver 2005 y visual studio 2008

  12. luis, primero que todo te quiero agradecer por el post, y como segundo punto tengo una pregunta, hay alguna posibilidad de ver la imagen nuevamente en un picturoox, es decir, ya la guarde, pero ahora la quiero volver a ver, se puede hacer???
    gracias

  13. hola buenas soy nuevo en el manejo de vb.net y me gustaria aque explicaras mejor la forma de como crear la base de datos donde lo haces en el video no muestras ese proceso espero tu respuesta lo mas pronto posible gracias

  14. Hola Buenos Días.
    Les agradezco inmensamente. Este tuto me ha servido de mucho. Mil gracias.
    Una pregunta, como seria el código para aliminar una image.
    Gracias

  15. hola que tal. mira muy interesnte este tema, pero quisiera saber si me puedes ayudar, necesito guardar archivos pdf en un campo de una base de datos, asi como tambien necesito luego poder extraerlo y visualizarlo, lo unico es que estoy usando una base de datos mysql, porfa ayudame

  16. Hola que tal, felicidades, un gran trabajo.

    una consulta estoy trabajando con vb.net y mysql, quisiera saber si me puedes ayudar para hacer este mismo tipo de ejemplo pero con documentos pdf, es que lo necesito para un trabajo del cole …

    es decir que en ves de que sean imagenes , se almacene otro tipo de archivo, puede ser pdf u otro tipo y que la base de datos sea en mysql.

    por favor ayudame con eso, he encontrado cientos de ejemplos con imagenes pero ninguna que me de solucion con otro tipo de archivos..

    gracias de antemano..

  17. Gracias por el codigo, pero a mi me manda un error al momento de llamar la imagen del grid. Me manda el siguiente error
    {«La conversión del tipo ‘Byte()’ en el tipo ‘Integer’ no es válida.»}
    Me podrias decir por que?
    gracias

  18. hola raul checa bien en tu base de datos en especificacion de la identidad te aparese como «no» tu cambiaselo a «si» y listo con eso ya debe de funcionar

  19. Primeramente te felicito por la aplicación, pero hay una pequeña falla al querer insertar una imagen. si no seleccionas una imagen y si le das cancelar da error

  20. una pregunta porfavorrrr este campo «ID» ME gustaria ponerle «CODIGO» y que sea de tipo alfanumérico por ejemplo «EMP001» Pero cada vez que lo intento me sale error por favor ayúdame… este proyecto lo debo presentar de aki a 4 diasss y quiero insertar una imagen pero no puedoooo… o si tienes otro método para insertar una imagen de vb.net 2008 a sql 2008 plisss ayudenmee…….ia no se k hacerrr 😦

  21. hola buenas…. estuve viendo este codigo.. y realmente me da una idea de como realizar lo q necesito pero no he podido realizarlo xD..
    si pudiesen ayudarme please….
    miren estoy haciendo un formulario

    en el cual si se dan cuenta abajo tengo unos form uploadfile….
    de esa manera no se como ralizarlo para q me guarde el archivo q selecciono en la base de datos….

    tenia algo asi…. he intentado con varios codigos encontrados en internet, pero no puedo realizarlos…

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    Try
    ‘abrir conexión

    con.Open()

    ‘declarar variables
    Dim foto As Byte
    Dim sql As String
    foto = uploadfoto.FileName

    ‘sentencia SQL
    sql = «INSERT INTO Table1 VALUES (‘» & foto & «‘) »

    ‘creo objeto command
    Dim command As New SqlCommand(sql, con)

    ‘ejecuto sentencia sql
    command.ExecuteNonQuery()
    Catch ex As Exception

    Finally
    ‘lblIngresar.Visible = True
    con.Close()

    End Try

    espero puedan ayudarme……

  22. muchas gracias por tomarte el tiempo y que nosotros los que no tenemos ese conocimiento podamos aprender un poco mas cada dia…

  23. Al devolver la imagen guardada en la grilla me muestra un error «La conversión del tipo ‘Byte()’ en el tipo ‘Integer’ no es válida.» ayuda please

    Gracias

  24. Saludos disculpa una pregunta, el bton para buscar la imagen y mostrarla me funciono muy bien, a la hora de almacenarla y mostrar el datagrid es cuando me sale un problema que me dice queno se pudpo conectar con el servidor de base de datos me podrias ayudar???
    gracias de ante mano

  25. En el error {“La conversión del tipo ‘Byte()’ en el tipo ‘Integer’ no es válida.”}
    Cambiar
    Dim ms As New MemoryStream(ExtraerImagen(CInt(DataGridView1.SelectedCells(0).Value)))
    Por :
    Dim ms As New MemoryStream(ExtraerImagen(CInt(DataGridView1.Rows(e.RowIndex).Cells(0).Value)))

Deja un comentario