2009-08-12 93 views
6

在我的数据库中,我将图像存储在“图像”数据类型中,显示为二进制代码。 我现在想要从一列中检索所有图像,并用C#将它们放在一个asp.net页面上。从Linq到SQL的数据库检索图像

databaseDataContext db = new databaseDataContext(); 

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

然后我用这个:

但是,这并不工作,因为二进制不能被转换为图片。我已经谷歌搜索,发现我必须投到字节,然后形象?我找不到如何做到这一点的例子。

回答

11

这应做到:

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

注意Image.FromStream采用流的所有权 - 它只是一个MemoryStream反正,但请确保您处理的图像,由于种种原因。


编辑:啊......我没有意识到这是ASP.NET。这使事情变得更加困难 - 因为HTML将包含URL,然后您需要能够稍后获取数据。

图片是否有某种ID?如果是这样,请取出实际数据,然后设置一个能够基于ID提供任何缩略图的URL(通过从数据库中提取它并使用适当的内容类型提供它)。

+0

谢谢,这照顾了很多问题。虽然我在循环中遇到了一些问题,“最好的重载方法匹配有一些无效参数”。 galleryImages指的是一个PlaceHolder,但其他可能性(文字,图像等)给出了相同的错误。加上添加(图片)告诉我“不能从'System.Drawing.Image'转换为'System.Web.UI.Control'”。我敢打赌,这很明显,我对.NET很不熟悉:o – Kablam 2009-08-12 14:02:34

+1

这样做:) 从数据库中检索pictureID,然后使用getImage.aspx.cs提取实际的imagedata。使用ContentType =“image/jpeg”;和BinaryWrite。 谢谢乔恩! – Kablam 2009-08-12 14:43:42

+0

酷 - 对于自称“非常缺乏经验”的人来说,这是一个非常快速的转变:) – 2009-08-12 14:45:00

相关问题