2009-08-12 6 views
6

Dans ma base de données, j'ai stocké des images dans le type de données "image", apparaissant sous forme de code binaire. Je veux maintenant récupérer toutes les images d'une colonne et les afficher sur une page asp.net avec C#.Récupération d'une image de la base de données avec Linq to SQL

databaseDataContext db = new databaseDataContext(); 

    var images = from Picture p in db.Pictures 
       select p.pictureThumb; 

puis-je utiliser ceci:

Mais cela ne fonctionne pas parce que binaire ne peut pas être converti en image. J'ai googlé cela et j'ai trouvé que je devais lancer à Byte et ensuite à l'image? Je ne peux pas trouver d'exemples sur la façon de faire cela.

Répondre

11

Cela devrait le faire:

databaseDataContext db = new databaseDataContext(); 

var images = from p in db.Pictures 
      select Image.FromStream(new MemoryStream(p.pictureThumb.ToArray()); 
foreach (Image image in images) 
{ 
    galleryImages.Controls.Add(image); 
} 

Notez que Image.FromStream prend possession du flux - c'est seulement une MemoryStream de toute façon, mais assurez-vous que vous disposez de l'image, pour diverses raisons.


EDIT: Ah ... Je n'avais pas réalisé que c'était pour ASP.NET. Cela rend les choses plus difficiles - parce que le code HTML va contenir des URL, et vous devrez ensuite pouvoir récupérer les données plus tard.

Une image possède-t-elle un ID quelconque? Si c'est le cas, récupérez-le à la place des données réelles, puis configurez une URL capable de servir toute vignette basée sur l'ID (en l'extrayant de la base de données et en la servant simplement avec un type de contenu approprié).

+0

Merci, qui a pris soin de beaucoup de problèmes. J'ai cependant quelques problèmes avec la boucle: "La meilleure méthode surchargée [...] a des arguments invalides". galleryImages fait référence à un PlaceHolder, mais les autres possibilités (Literal, Image, etc.) donnent la même erreur. PLUS le Add (image) me dit "ne peut pas convertir de 'System.Drawing.Image' en 'System.Web.UI.Control'". Je parie qu'il est assez évident que je suis très inexpérimenté avec .NET: o – Kablam

+1

Cela l'a fait :) Récupérez le pictureID de la base de données, puis utilisez getImage.aspx.cs pour extraire le imagedata réel. Utilisez ContentType = "image/jpeg"; et BinaryWrite. Merci Jon! – Kablam

+0

Cool - pour quelqu'un qui prétend être "très inexpérimenté" qui a été un redressement vraiment rapide :) –

Questions connexes