Memorizzare una immagine su database Sql Server

Mi sono imbattuto nella necessità di memorizzare una immagine su database. Nonostante sia più conveniente memorizzare i file binari su un repository esterno e tracciarne su DB solo i riferimenti, può essere interessante anche capire come eventualmente tenere tutti i dati nello stesso posto, ad esempio se si ha a che fare con ambienti cloud.
Ho utilizzato il tipo di dati System.Data.Linq.Binary per inserire un blocco di dati binari non modificabili, in una colonna di tipo image. Il costruttore prende come argomento un array di byte, occorre quindi prima trasformare la nostra immagine nel tipo di dati corretto:

private static byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
    using (MemoryStream ms = new MemoryStream())
    {
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
        return ms.ToArray();
    }
}

private static Image ByteArrayToImage(byte[] byteArrayIn)
{
    using (MemoryStream ms = new MemoryStream(byteArrayIn))
    {
        Image returnImage = Image.FromStream(ms);
        return returnImage;
    }
}

Fatto ciò, possiamo possiamo inserire i dati nell’oggetto associato alla tabella del DB:

// Convert System.Drawing.Image to a byte[]
byte[] file_byte = ImageToByteArray(thumb);
// Create a System.Data.Linq.Binary - this is what an "image" column is mapped to
System.Data.Linq.Binary file_binary = new System.Data.Linq.Binary(file_byte);

objectRow.image = file_binary;

objectdb.tableName.InsertOnSubmit(cr);
objectdb.SubmitChanges();
Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...