Guardar imágenes en MySQL usando VB.Net

En este ejemplo les mostrare como guardar imágenes en una tabla de mysql desde una aplicación de visual basic.net 2005, en este ejemplo usare una tabla a la cual le llamó “tbl_imagenes” con dos campos: “ID” de tipo Int e “imagen” de tipo longblob, un control PictureBox para mostrar la imagen y el proveedor de conexión para mysql “MySQL ConnectorNet” el cual lo puedes descargar desde la pagina de MySQL, este conector lo que te provee es una dll “Mysql.Data.dll” hay dos tipos, uno instalable y otro que solo te descarga la dll, en ambos casos solo debes agregar una referencia en tu projecto de vb.net de la dll, en el caso de haber instalado la dll y otros archivos adicionales debes buscar la dll en “C:\Archivos de programa\MySQL\MySQL Connector Net 5.2.5\Binaries\.NET 2.0”.
Antes de ver el ejemplo te explico brevemente el tipo de datos blob de mysql.  Blob es un tipo de datos u objeto binario que se usa para almacenar precisamente valores binarios, las columnas blob se tratan como cadenas de caracteres binarias (byte), hay cuatro tipos: TINYBLOBBLOBMEDIUMBLOB, y LONGBLOB.
TINYBLOB: Longitud de 0 a 255.
BLOB: Longitud máxima de 65535.
MEDIUMBLOB: Longitud máxima de 16,777,215.
LONGBLOB: Longitud máxima de 4,294,967,295.
Código Ejemplo:
imagvbmysql
Imports System.Data
Imports System.IO
Imports MySql.Data.MySqlClient

Public Class Form1
    Public cnn As MySqlConnection
    Dim StrConexion As String = "server=localhost;uid=usuario;password=pwd;database=BD"

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub BtnAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAbrir.Click
       abrir_inventario_existente()
    End Sub

    Private Sub BtnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnGuardar.Click
        Try
            Dim sql As String = "insert into tbl_imagenes(imagen)values(?imagen)"
            cnn = New MySqlConnection(StrConexion)
            Dim Comando As New MySqlCommand(sql, cnn)
            Dim Imag As Byte()
            Imag = Imagen_Bytes(Me.PictureBox1.Image)

            Comando.Parameters.AddWithValue("?imagen", Imag)

            cnn.Open()
            If cnn.State = ConnectionState.Open Then
                Comando.ExecuteNonQuery()
            End If
            cnn.Close()

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub BtnBuscarBD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnBuscarBD.Click
        Try
            Dim Sql As String = "select * from tbl_imagenes where id=" & Me.TxtID.Text & ""
            Dim lector As MySqlDataReader
            cnn = New MySqlConnection(StrConexion)
            cnn.Open()
            If cnn.State = ConnectionState.Open Then
                Dim Imag As Byte()
                Dim Comando As New MySqlCommand(Sql, cnn)
                lector = Comando.ExecuteReader
                While lector.Read
                    Imag = lector("imagen")
                    Me.PictureBox1.Image = Bytes_Imagen(Imag)
                End While
            End If
            cnn.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub abrir_inventario_existente()
        Dim filename As String
        Dim openfiler As New OpenFileDialog
        'Definiendo propiedades al openfiledialog
        With openfiler
            'directorio inicial
            .InitialDirectory = "C:\"
            'archivos que se pueden abrir
            .Filter = "Archivos de imágen(*.jpg)|*.jpg|All Files (*.*)|*.*"
            'indice del archivo de lectura por defecto
            .FilterIndex = 1
            'restaurar el directorio al cerrar el dialogo
            .RestoreDirectory = True
        End With
        '
        If openfiler.ShowDialog = Windows.Forms.DialogResult.OK Then  'Evalua si el usuario hace click en el boton abrir
            'Obteniendo la ruta completa del archivo xml
            filename = openfiler.FileName
            Me.PictureBox1.Image = Image.FromFile(filename)
        End If
    End Sub

    'convertir binario a imágen
    Private Function Bytes_Imagen(ByVal Imagen As Byte()) As Image
        Try
            'si hay imagen
            If Not Imagen Is Nothing Then
                'caturar array con memorystream hacia Bin
                Dim Bin As New MemoryStream(Imagen)
                'con el método FroStream de Image obtenemos imagen
                Dim Resultado As Image = Image.FromStream(Bin)
                'y la retornamos
                Return Resultado
            Else
                Return Nothing
            End If
        Catch ex As Exception
            Return Nothing
        End Try
    End Function

    'convertir imagen a binario
    Private Function Imagen_Bytes(ByVal Imagen As Image) As Byte()
        'si hay imagen
        If Not Imagen Is Nothing Then
            'variable de datos binarios en stream(flujo)
            Dim Bin As New MemoryStream
            'convertir a bytes
            Imagen.Save(Bin, Imaging.ImageFormat.Jpeg)
            'retorna binario
            Return Bin.GetBuffer
        Else
            Return Nothing
        End If
    End Function

End Class
Descargate el código fuente: GuardarImagenMySql
Anuncios

Acerca de tihuilo

Estudiante de Ing. en Sistemas y Computación
Esta entrada fue publicada en Visual Basic.Net. Guarda el enlace permanente.

5 respuestas a Guardar imágenes en MySQL usando VB.Net

  1. Gabriel Echegaray dijo:

    Muchas Gracias.
    (loco nadie te ha escrito agradeciendo lo que habias posteado )

  2. bimboclaim dijo:

    Oye hermano muchas gracias me salvo ya que no puedia hacer que la imagen se mostrara excelente.

  3. Fernando Vallejo dijo:

    Te pasaste tio, me hizo de gran ayuda saludos.

  4. Mildred dijo:

    Hola amigo muy buen ejercicio,si eres tan amable podias escribir el codigo de los botones.primerRegistro,Siguiente,ultimo y anterior te lo agradeceria mucho,gracias

  5. geeky dijo:

    Excelente, me estaba volviendo loco al mostrar las imagenes guardadas en la BD. Gracias!!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s