lunedì 25 gennaio 2010

Immagini su database con Linq e C#

Tempo fa cercavo in internet una guida comoda su come salvare e caricare le immagini da database usando Linq e C#, trovando poche e non sempre facili solizioni.

Ho deciso così di inserire qui una guida fatta da me su come salvare e caricare le immagini attraverso Linq e C# su database Sql nel modo più semplice che ho trovato.

Io uso Visual Studio, e uso la ClassToLinq per andare a leggere e scrivere nelle mie tabelle.

Innanzitutto quando portiamo la nostra tabella nella nostra ClassLinqToSql (DataClassesImmaginiDataContext in questo esempio) andiamo a modificare il tipo restituito dal campo di tipo Image, come visualizzato nelle immagini seguenti:

Appena trascinata la nostra tabella nel DataContexImmagini notiamo come il campo restituito dalla colonna Immagine della tabella Immagini sia di tipo Binary (System.Data.Linq.Binary).




Modifichiamo questo tipo in byte[] (System.Byte[]).



Ora il gioco è praticamente fatto! Caricare e salvare le immagini nel nostro database è cosa presto fatta:

Ecco il codice per caricare una immagine già salvata nel database:


private void CaricaImmagine(long idImmagine)

{

if (idImmagine != 0)

{

using (DataClassesImmaginiDataContext dataContext = new DataClassesImmaginiDataContext())

{

var locImmagine = (from locImage in dataContext.Immagini

where locImage.IdImmagine == idImmagine

select locImage).Single();


lblDescrizioneFoto.Text = locImmagine.Descrizione;


if (locImmagine.Immagine != null)

{

object objImmagine = locImmagine.Immagine;

if (objImmagine != null && objImmagine.ToString() != "")

{

byte[] objByte = (byte[])objImmagine;

MemoryStream ms = new MemoryStream(objByte);

Image returnImage = Image.FromStream(ms);

pictureBoxImmagine.Image = returnImage;

}

}

else

{

pictureBoxImmagine.Image = null;

}

}

}

else

{

pictureBoxImmagine.Image = null;

lblDescrizioneFoto.Text = "";

}

}


Ed ecco il codice per inserire una nuova immagine nel database:


private void SalvaImmagine()
{
using (DataClassesImmaginiDataContext dataContext = new DataClassesImmaginiDataContext())
{
Immagini immagineDaSalvare = new Immagini();
immagineDaSalvare.Descrizione = txtDescrizioneImmagine.Text.ToString();
if (pictureBoxImmagine.Image != null)
{
Image locImmage = Image.FromFile(pictureBoxImmagine.ImageLocation);
MemoryStream ms = new MemoryStream();
locImmage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] objByte = ms.ToArray();

immagineDaSalvare.Immagine = objByte;
}

dataContext.Immagini.InsertOnSubmit(immagineDaSalvare);
dataContext.SubmitChanges();
}
}

1 commenti:

  1. I think that is right bout that. Nice info and thanks. Need to get in google feed.

    generic nolvadex

    RispondiElimina

Lettori fissi