2012-06-06 108 views
0

在我的基於MVC 3/SQL Server的應用程序中,我想將一個pdf文檔作爲blob存儲在數據庫中。在我的模型我有這樣的特性:如何在數據庫中存儲和檢索文件爲blob?

public byte[] PdfData { get; set; } 

讀取該文件,並正從一個文件流的字節數是相當簡單的,但試圖保存更改我得到的錯誤

Byte array truncation to a length of 4000

這當然當這是合理的,因爲文檔大於默認的4000字節限制。但我不允許將maxlength屬性設置爲超過8000,這太小了。我知道我可以通過使用圖像數據類型這樣繞開這個問題:

[Column(TypeName = "image")] 
public byte[] PdfData { get; set; } 

但據我瞭解,在圖像數據類型是那裏只是爲了向下兼容,並且隨時可能消失。我想要做的是使用varbinary(max)數據類型。但是,如何設置我的模型以在SQL Server中生成此數據類型的列?作爲便箋,我目前在我的開發環境中運行SQL Server CE,但該應用程序將在部署時定位到常規SQL Server 2008數據庫。不確定這是否相關。

+0

是的,我嘗試[列(TypeName =「varbinary(max)」]只是爲了得到錯誤:類型varbinary(max)沒有限定名稱空間或別名只有PrimitiveTypes可以使用沒有資格 – TMan

回答

1

請參閱Download and Upload images from SQL Server via ASP.Net MVC,您可以簡單地使用它來存儲PDF而不是圖像。對於基於文件流的實現也是FILESTREAM MVC: Download and Upload images from SQL Server。其要點在於,您不僅希望存儲和檢索大塊,還絕對避免與byte[]之間的轉換,因爲這意味着必須首先將整個文檔複製到ASP進程中的實時內存中,並且它會終止服務器即使是中等負荷。上面的例子展示瞭如何使用流媒體界面進行上傳和下載。

+0

謝謝,Remus,這在我的情況下可能是過度的,但稍後它可能會有用。 – TMan

相關問題