如何在asp.net mvc3中的sql数据库中检索存储的图像?

时间:2012-06-01 11:29:27

标签: sql asp.net-mvc asp.net-mvc-3 sql-server-2008

我的数据库中有一个表,其中一列是图像数据类型。我可以将Image存储在数据库中,但我无法检索它。我想为每个登录用户检索Image。我用了这段代码:

public ActionResult ShowImage()
{
    var userID = GetUserID();
    var advert = from ad in StoreDb.Ads where ad.UserId == userID select ad.AdImage;
    return File(advert, "Image");     
}

但得到了这个错误:

  

错误2参数1:无法从'System.Linq.IQueryable'转换为'string'C:\ Users \ Tena \ Documents \ Visual Studio 2010 \ Projects \ MvcApplication6 \ MvcApplication6 \ Controllers \ Default3Controller.cs 92 25 MvcApplication6 < / p>

问题在于广告在

System.Linq.IQueryable<>byte[]

格式但文件需要byte[]格式。我现在应该怎么做?任何答案都有帮助。

由于

2 个答案:

答案 0 :(得分:2)

我不确定,这是解决这个问题的方法。我通常实现一个自定义的http处理程序,它需要一些id(例如userid)连接到数据库,获取图片并返回具有正确mime类型的图片的字节流。

在“视图”中,我只使用http处理程序的url作为图像源创建一个图像标记。

答案 1 :(得分:2)

问题是LINQ查询没有被评估,并且理论上的查询理论上可以返回多个结果(因此它是IQueryable)。

事实上,查询看起来不正确,因为可能会为特定用户提供多个广告,我不希望在任何情况下根据用户存储广告,但我什么都不知道关于你的数据结构,所以我只是试着帮助你使查询工作,你可以稍后改进它。

尝试更改此行:

var advert = from ad in StoreDb.Ads where ad.UserId == userID select ad.AdImage;

到此:

var advert = (from ad in StoreDb.Ads where ad.UserId == userID select ad.AdImage).FirstOrDefault();

我可以提供有关如何执行此操作的其他提示,但请先尝试一下,看看会发生什么。