web-dev-qa-db-fra.com

Enregistrer et récupérer une image (binaire) à partir de SQL Server à l'aide d'Entity Framework 6

J'essaie de sauvegarder une image bitmap dans la base de données

Bitmap map = new Bitmap(pictureBoxMetroMap.Size.Width, pictureBoxMetroMap.Size.Height);

J'ai créé une colonne imgcontent dans la base de données avec le type de données binary mais mon problème est de savoir comment puis-je convertir ce bitmap (carte) en données binaires?

Et comment puis-je récupérer des données de la base de données?

Je l'ai googlé et j'ai trouvé quelque chose comme ça mais ça n'a pas marché:

byte[] arr;
ImageConverter converter = new ImageConverter();
arr = (byte[])converter.ConvertTo(map, typeof(byte[]));
33
Ehsan Akbar

Convertir l'image en un byte[] et le stocker dans la base de données.


Ajoutez cette colonne à votre modèle:

public byte[] Content { get; set; }

Puis convertissez votre image en tableau d'octets et stockez-la comme toute autre donnée:

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

public Image byteArrayToImage(byte[] byteArrayIn)
{
     MemoryStream ms = new MemoryStream(byteArrayIn);
     Image returnImage = Image.FromStream(ms);
     return returnImage;
}

Source: Le moyen le plus rapide de convertir une image en tableau d'octets

var image = new ImageEntity(){
   Content = imageToByteArray(image)
}
_Context.Images.Add(image);
_Context.SaveChanges();

Lorsque vous voulez récupérer l’image, récupérez le tableau d’octets dans la base de données et utilisez le byteArrayToImage et faites ce que vous voulez avec le Image

Cela cesse de fonctionner lorsque le byte[] devient trop gros. Cela fonctionnera pour les fichiers de moins de 100 Mo

74
JensB