【问题标题】:Retrieving an image from database with Linq to SQL使用 Linq to SQL 从数据库中检索图像
【发布时间】:2009-08-12 13:37:45
【问题描述】:

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

databaseDataContext db = new databaseDataContext();

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

然后我用这个:

    foreach (Picture p in images)
    {
        galleryImages.Controls.Add(p);
    }

但这不起作用,因为二进制无法转换为图片。我用谷歌搜索了这个,发现我必须先转换为字节然后再转换为图像?我找不到如何做到这一点的例子。

【问题讨论】:

    标签: c# .net linq linq-to-sql


    【解决方案1】:

    应该这样做:

    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(通过从数据库中获取它并仅使用适当的内容类型提供它)。

    【讨论】:

    • 谢谢,解决了很多问题。我对循环有一些问题,“最好的重载方法匹配 [...] 有一些无效的参数”。 galleryImages 指的是 PlaceHolder,但其他可能性(文字、图像等)会给出相同的错误。加上 Add(image) 告诉我“无法从 'System.Drawing.Image' 转换为 'System.Web.UI.Control'”。我敢打赌,很明显我对 .NET 非常缺乏经验:o
    • 做到了 :) 从数据库中检索图片 ID,然后使用 getImage.aspx.cs 提取实际的图像数据。使用 ContentType = "image/jpeg";和二进制写入。谢谢乔恩!
    • 酷 - 对于声称“非常缺乏经验”的人来说,这是一个非常快速的转变:)
    • 我认出了很多我已经在 Googlequest 上读过的东西,并知道如何使用它们 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    相关资源
    最近更新 更多