viernes, 7 de enero de 2011

INSERTAR UNA IMAGEN EN BASES DE DATOS SQL SERVER 2008 CON VISUAL STUDIO 2008(C#)

Uno de los temas un poco mas complicados de mantenimiento de Registros en Bases de Datos es el de poder insertar Imágenes o fotografías cuando sea necesario para el cliente, navegando un poco por  la web encontré algunas soluciones, pero me quede con la más fácil, en el próximo tutorial a éste mostraré como hacer para mostrar los registros que guarden imagenes en REPORTING SERVICES y/o CRYSTAL REPORT, pero primero paso a paso como insertar un registro que contiene imagen en C#.

1. CREAR LA BASE DE DATOS Y LA TABLA EN SQL SERVER 2008
    - Clic en nueva consulta y escribir el siguiente código y luego ejecutar


2. CREAR EL PROYECTO EN VISUAL STUDIO 2008 Y DISEÑAR LA INTERFAZ
 - Proyecto de Aplicacion Windows c#
- Para mostrar la imagen elegir el control PictureBox



3. ESCRIBIR EL CÓDIGO DEL BOTÓN EXAMINAR PARA QUE SE ABRA EL CUADRO DE SELECCIÓN DE LA IMAGEN Y SELECCIONEMOS LA IMAGEN DESEADA Y SE MUESTRE EN EL PICTURE BOX
- cuando ejecutamos se muestra de la siguiente manera

4. ESCRIBIR EL CÓDIGO PARA EL BOTÓN GUARDAR


private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(@"Data Source=
(local);Initial Catalog=EJEMPLO;Integrated Security=SSPI");
                System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();

                // Estableciento propiedades
                cmd.Connection = conn;
                cmd.CommandText = "INSERT INTO Productos VALUES (@Codigo, @Descripcion, @Cantidad, @precio, @foto)";

                // Creando los parámetros necesarios
                cmd.Parameters.Add("@Codigo", System.Data.SqlDbType.Int);
                cmd.Parameters.Add("@Descripcion", System.Data.SqlDbType.NVarChar);
                cmd.Parameters.Add("@Cantidad", System.Data.SqlDbType.Int);
                cmd.Parameters.Add("@precio", System.Data.SqlDbType.SmallMoney);
                cmd.Parameters.Add("@foto", System.Data.SqlDbType.Image);

                // Asignando los valores a los atributos
                cmd.Parameters["@Codigo"].Value = int.Parse(txtCodigo.Text);
                cmd.Parameters["@Descripcion"].Value = txtDescripcion.Text;
                cmd.Parameters["@Cantidad"].Value = int.Parse(txtCantidad.Text);
                cmd.Parameters["@precio"].Value = float.Parse(txtPrecio.Text);

                // Asignando el valor de la imagen

                // Stream usado como buffer
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                // Se guarda la imagen en el buffer
                picFoto.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                // Se extraen los bytes del buffer para asignarlos como valor para el
                // parámetro.
                cmd.Parameters["@foto"].Value = ms.GetBuffer();

                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            MessageBox.Show("Registro Guardado Correctamente");
        }
              
    }
}


5. EJECUTAMOS Y PROBAMOS


6. VERIFICAMOS EN LA BASE DE DATOS SI SE GUARDO EL REGISTRO

Como vemos el registro se guardo correctamente y en la columna Foto se guarda y valor de la ubicación en memoria de dicha imagen que se ha extraído sus bytes, para almacenarlos en un buffer que es finalmente en esta forma como se almacena en la BD.
Gracias

14 comentarios:

  1. AMIGO ME DA UN ERROR DICE

    El nombre picFoto no existe en el contexto actual

    ResponderEliminar
  2. sustitui picFoto por pictureBox1 y me corrio pero ahora luego que asigno la imagen y le doy click a btnGuardar me aparece

    "La cadena de entrada no tiene un formato correto" Le doy ACEPTAR y luego aparece

    "Registro Guardado Correctamen"

    PERO NO LO GUARDA!

    http://imageshack.us/photo/my-images/29/errorluegodeseleccionar.png/

    AQUI EL CODIGO

    http://chopapp.com/#lmsf2mca

    ResponderEliminar
  3. HICE OTRO PROYECT EXACTAMENTE COMO ESTA EL CODIGO EJEMPLO Y AHOA AL DARLE GUARDAR DICE

    "REFERECIA A OBJETO NO ESTABLECIDA COMO INSTANCIA A UN OBJETO"


    AGRADECEIA AYUDA!

    ResponderEliminar
  4. como se conecta con la base de datos...me sale que no encuentra en archivo....hay un error de ruta....
    como lo hago...

    solicito apoyo....

    Faydel

    ResponderEliminar
  5. Grasias amigo muy buen tutorial saludos

    ResponderEliminar
  6. que pasa si no deseo agregar una imagen?? me botaria error cual seria el nuevo codigo al no querer insertar una imagen??

    ResponderEliminar
  7. A mi tambien me aparece que "la cadena de entrada no tiene un formato correcto "...

    ResponderEliminar
  8. Soy Manuel:

    elabore un proyecto similar pero con una tabla hecha en sql2005 en mi maquina como ubicacion, creo las columnas y pongo lo mismo en la tabla que tu creaste, sin embargo a la hora de recoger el valor de la imagen me dice que el parametro no es correcto y no existe dentro de la tabla, porfavor ayuda

    ResponderEliminar
  9. ESTA MUY BUENO ESTE TEMA PERO TE RECOMENDARIA QUE LO HAGAS EN ASP.NET COMO GUARDAR UNA IMAGEN FISICA EN UNA CARPETA DEL PROYECTO Y TAMBIEN CAMBIAR EL NOMBRE DE LA IMAGEN

    ResponderEliminar
  10. Men Eres TODO un Cabronaso Te larifaste Al 100%

    ResponderEliminar
  11. UNA CONSULTA! Y COMO HARIA SI DESEO MOSTRAR EL DATO GUARDADO EN LA BD?
    ESPERO SUS AYUDAS! GRACIAS..!

    ResponderEliminar
  12. brother como se llama la rola que suena de fondo?

    ResponderEliminar
  13. muchas gracias amigo por tu buen aporte en este blog estubo algo sencillosolo necesite 4 lineas de tu codigo para poder hacerlo de nuevo gracias por tu aporte

    ResponderEliminar
  14. Brother muchisimas gracias por tu ayuda, me encantaria mucho mas si nos pusieras los temas de REPORTING SERVICES y/o CRYSTAL REPORT

    ResponderEliminar