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();

Lascia un commento