Guardar imagen en base de datos

Les dejo un pequeño demo de como guardar y recuperar imagenes (con C Sharp y SQL Server)

Preparemos la base de datos!  Despues de crear la base de datos  _DemoGuardarImagen_ podemos ejecutar este script para crear la tabla _Producto_ que por simplicar el demo solo tendra los campos   Codigo tipo INT y Foto tipo IMAGE.

USE [DemoGuardarImagen] --USE TU-BASE-DE-DATOS
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Producto](
    [Codigo] [int] NOT NULL,
    [Foto] [image] NOT NULL,
CONSTRAINT [PK_Producto] PRIMARY KEY CLUSTERED 
(
    [Codigo] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Ahora desde .Net (C#)

Creemos un formulario con un par de PictureBox. Algo asi:

demo

Y aqui el codigo que se explica solo!!!

private void btnCargarImagen_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            PictureBoxParaGuardar.ImageLocation = openFileDialog1.FileName;
            //Este codigo nos permite buscar una imagen en el disco duro y asiganarla al picturebox
        }

        private void guardar_Click(object sender, EventArgs e)
        {
            int m_codigo = Convert.ToInt32(txtCodigoGuardar.Text);
            MemoryStream m_MemoryStream = new MemoryStream();
            PictureBoxParaGuardar.Image.Save(m_MemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            byte[] m_imagen = m_MemoryStream.ToArray();
            //Como ven lo que realmente enviamos a la tabla es un arreglo de byte🙂 
            //y podemos decir que estas tres lineas anteriores son lo complicado de la tarea.

            SqlConnection m_SqlConnection = new SqlConnection("Server=.;database=DemoGuardarImagen;integrated security=true");
            SqlCommand m_SqlCommand = new SqlCommand("insert into producto (codigo,foto) values(@Cod,@Fot)", m_SqlConnection);
            m_SqlCommand.Parameters.AddWithValue("@Cod", m_codigo);
            m_SqlCommand.Parameters.AddWithValue("@Fot", m_imagen);

            m_SqlConnection.Open();
            m_SqlCommand.ExecuteNonQuery();
        }

        private void buscar_Click(object sender, EventArgs e)
        {
            int m_codigo = Convert.ToInt32(txtCodigoBuscar.Text);
            byte[] m_imagen = new byte[0];

            SqlConnection m_SqlConnection = new SqlConnection("Server=.;database=DemoGuardarImagen;integrated security=true");
            SqlCommand m_SqlCommand = new SqlCommand ("select foto from producto where codigo=@Cod", m_SqlConnection);
            m_SqlCommand.Parameters.AddWithValue("@Cod", m_codigo);
            SqlDataAdapter m_SqlDataAdapter = new SqlDataAdapter(m_SqlCommand);

            DataSet ds = new DataSet();
            m_SqlDataAdapter.Fill(ds, "Producto");

            //Aqui simplemente revertimos la conversion que realizamos a guardar
            m_imagen = (byte[]) ds.Tables["Producto"].Rows[0]["foto"];
            MemoryStream m_MemoryStream = new MemoryStream(m_imagen);
            PictureBoxParaMostrar.Image = Image.FromStream(m_MemoryStream);
        }

El resultado sera…Fingers crossed

image

Aquí un link del proyecto (con script de la base de datos):

http://dl.dropbox.com/u/26490398/c/nplanchart.wordpress.com_GuardarImagen.zip

7 Respuestas a “Guardar imagen en base de datos

  1. Aja Y en Linq Como lo hago ? por que al intentar convertir el campo binary al array de byte da error😦.

    no se puede convertir de System.data.linq.binary a Byte algo asi o.O

  2. me podrias mostrar el codigo con linq completo ya con todos los pasos y busqueda x fa tengo el mismo problema en linq

  3. sale error en esta linea PictureBoxParaMostrar.Image = Image.FromStream(m_MemoryStream); ayuda x fa……

  4. Hola amigo, disculpa la molestia pero y que pasaria si quiero trabajar pero a base de rutas supongamos que quiero insertar en una carpeta llamada imagenes que esta en C, y en el modificar como haria en base a rutas, saludos

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