2012-06-01 44 views
0

我在我的數據庫中有一個表,其中一列是圖像數據類型。我可以將Image存儲在數據庫中,但無法檢索它。我想爲每個登錄用戶檢索圖像。我用這個代碼:如何檢索asp.net mvc3中的sql數據庫中存儲的圖像?

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

但得到這個錯誤:

Error 2 Argument 1: cannot convert from 'System.Linq.IQueryable' to 'string' C:\Users\Tena\Documents\Visual Studio 2010\Projects\MvcApplication6\MvcApplication6\Controllers\Default3Controller.cs 92 25 MvcApplication6

的問題是,廣告是

System.Linq.IQueryable<>byte[] 

格式,但文件需要byte[]格式。我現在應該怎麼做?任何答案都有幫助。

謝謝

回答

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

我可以給你身邊如何做到這一點其他的技巧,但嘗試首先看看會發生什麼。

+0

非常感謝。是的,這是我的錯。有多個用戶的圖像,當我從數據庫中刪除它時,它完美無缺。 – starrr

+0

有沒有更好的方法來做到這一點? – starrr

+0

除了製作一個通用文件檢索函數,它需要一個ID並獲取文件之外,你的方法實際上看起來很好。我在我的MVC項目中有這樣的代碼:'返回文件(file.ImageData,file.MimeType);'給你的控制器提供更有意義的名字可能是有幫助的(錯誤消息包含對'Default3Controller.cs'的引用)。 –

2

我不確定,這是要解決這個問題的方法。我通常實現一個自定義的http處理程序,它需要一些id(例如userid)連接到數據庫,獲取圖片並返回具有正確MIME類型圖片的字節流。

在「視圖」中,我只是使用http處理程序的url作爲圖像源創建一個圖像標記。

+0

@ Mithrandir:感謝您的回答,但我是mvc的新成員,並未使用此解決方案。但是,謝謝,我會學習它。 – starrr

相關問題