none
tablas con imagenes

    Question

  • hola tengo una duda haber si me pueden ayudar, lo que quiero hacer es hacer una base de datos pero guando imagenes,

    un ejemplito

    codigo   descripcion   imagen
    001       mause           01.jpeg


    quiero mostrar codigo y descripcion en un datagrid y la imagen del articulo en un PictureBox, lo que no se como hacer es guardar imagenes en un BD. estoy programando con visual c# 2008 con MySql 5.0 

    gracias por su atencion

    salu2
    Monday, February 02, 2009 10:01 PM

Answers

  • Perdona, no me he dado cuenta que ponías que usabas MySQL.

    Para MySQL creo que no existe el tipo Image, el tipo del campo sería BLOB para almacenar la imagen.

    Un saludo!
    Ibon Landa - http://geeks.ms/blogs/ilanda
    Monday, February 02, 2009 10:49 PM
  • :-)
    Hola Frank,

    Básicamente deberás usar un campo con un tipo de datos binario (supongo que MySQL soporta algún tipo BLOB).
    Una vez tengas esto, basta con que transformes un objeto de tipo Image en un array de bits, que posteriormente guardarás en la BD. Puedes usar estas funciones para convertir una Imagen en un array y viceversa:

            public static byte[] convertImageToByteArray(System.Drawing.Image imageIn)  
            {  
                MemoryStream ms = new MemoryStream();  
                imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png);  
                return ms.ToArray();  
            }  
     
            public static Image convertByteArrayToImage(byte[] byteArrayIn)  
            {  
                MemoryStream ms = new MemoryStream(byteArrayIn);  
                Image returnImage = Image.FromStream(ms);  
                return returnImage;  
            }   
     

    Recuerda que este código está bajo licencia Beerware ;-)
    Saludos!
    [MS-MVP-MCTS] Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis NUG: http://andorradotnet.com Web: http://www.ordeeno.com Blog: http://msmvps.com/blogs/lfranco Geeks: http://geeks.ms/blogs/lfranco
    Tuesday, February 03, 2009 10:58 AM
    Moderator

All replies

  • En lugar de guardar la imagen en la base de datos, es muy habitual guardar simplemente el path al fichero y guardar la imagen físicamente en disco. Cuando se recupera se recupera el path al fichero y éste se asocia a la imagen. Eso sí, tienes que añadir control extra, que es que si se borra el registro de la base de datos tienes que borrar tb el fichero físicamente.

    Si la quieres guardar completa en la base de datos deberías usar un campo de tipo Image. Te paso un par de enlances por si optas por esta segunda opción.
                http://www.picacodigos.com/2006/02/20/GuardarFicherosBinariosEnSQLServer.aspx
                http://www.elguille.info/NET/ADONET/SQL2005Express/imagenes_base_SQLServer.htm

    Espero que te sea de utilidad.


    Ibon Landa - http://geeks.ms/blogs/ilanda
    Monday, February 02, 2009 10:46 PM
  • Perdona, no me he dado cuenta que ponías que usabas MySQL.

    Para MySQL creo que no existe el tipo Image, el tipo del campo sería BLOB para almacenar la imagen.

    Un saludo!
    Ibon Landa - http://geeks.ms/blogs/ilanda
    Monday, February 02, 2009 10:49 PM
  • :-)
    Hola Frank,

    Básicamente deberás usar un campo con un tipo de datos binario (supongo que MySQL soporta algún tipo BLOB).
    Una vez tengas esto, basta con que transformes un objeto de tipo Image en un array de bits, que posteriormente guardarás en la BD. Puedes usar estas funciones para convertir una Imagen en un array y viceversa:

            public static byte[] convertImageToByteArray(System.Drawing.Image imageIn)  
            {  
                MemoryStream ms = new MemoryStream();  
                imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png);  
                return ms.ToArray();  
            }  
     
            public static Image convertByteArrayToImage(byte[] byteArrayIn)  
            {  
                MemoryStream ms = new MemoryStream(byteArrayIn);  
                Image returnImage = Image.FromStream(ms);  
                return returnImage;  
            }   
     

    Recuerda que este código está bajo licencia Beerware ;-)
    Saludos!
    [MS-MVP-MCTS] Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis NUG: http://andorradotnet.com Web: http://www.ordeeno.com Blog: http://msmvps.com/blogs/lfranco Geeks: http://geeks.ms/blogs/lfranco
    Tuesday, February 03, 2009 10:58 AM
    Moderator
  • gracias por sus repuestas amigos, pues tendre que utilisar otro motor de base de datos para poder insertar imagenes, saludos amigo y gracias de nuevo
    Wednesday, February 04, 2009 9:43 PM
  • Hola,

    En MySQL en el tipo BLOB soporta guardar imágenes, no sería necesario cambiar de base de datos si quieres guardar la imagen dentro de ella, aunque si quieres cambiar una opción que podrías mirar son las versiones Express de SQL Server, lo digo porque es gratuita.

    Un saludo,
    Ibon Landa - http://geeks.ms/blogs/ilanda
    Wednesday, February 04, 2009 10:18 PM
  • hola de nuevo, pues creo que no me di a entender muy bien, haber si me entienden aurita, desde el principio debi hacerlo, saber si es posible y como hacerlo,  hacer un redireccionanamiento, todas mis imagenes los guarde en una carpeta y que solo el sea necesario poner el nombre de la imagen en la base de datos, al hacer una consulta y llamar a una imagen, sea posible de visivilisar en una picturecbox

    ahora hacer si hay una forma de hacer aunque sea solo el redireccionamiento, ya lo otro vere como hacerlo

    salu2
    Thursday, February 05, 2009 12:02 AM
  • Hola Frank01010....

    ellos han entendido bien tu consulta, solo que veo que tu no tienes bien claro lo que kieres hacer o lo tienes pero hay mejores soluciones ya que deberias de considerar si tu aplicación es multiusuario y solo alojas en nombre del archivo de imagen o la ruta no podras ver la imagen desde otra estación de trabajo o si podrias pero tendrias que complicarte un poco más ya que tendrias que crear un directorio compartido en la computadora o en el servidor... y ojo!!!!... imaginate que alguien borre el archivo ya no te servira en cuanto si tienes almacenado el archivo en un campo de tu base de datos, podrias hasta formatear la computadora donde esta la imagen, y siempre la podrias ver desde tu aplicación ya que esta está alojada en la base de datos y hasta podrias volver a crear el archivo...

    ahora!!!.... MySQL nunca lo he usado pero si he escuchado que tiene el campo BLOB para almacenar información binaria... los fragmentos de código que Lluis te muestra son exactamente para eso... para que puedas convertir tu archivo de imagen en bytes y lo puedas guardar en tu Base de datos y tambien esta el código para que recuperes esta imagen de la base de datos, creando una variable tipo Image para que la puedas visualizar en un PictureBox...

    espero haberte ayudado a entender la soluciones que te plantean...

    Saludos,

    Saturday, February 07, 2009 4:51 AM
    Moderator
  • Hola quizas me puedan ayudar yo estoy trabajando con BD en Oracle , ya guardo mi imagen converida en byte en la base de datos , lo que no se es como volverla a convertir en una imagen y mostrarla en el control Image de c# porque estoy trabajando en web y no existe el picImage..gracias.
    Wednesday, February 11, 2009 7:25 PM