如何在数据库中存储和检索文档作为blob?

时间:2012-06-06 08:41:17

标签: sql-server asp.net-mvc-3 model-view-controller blob

在我的基于MVC 3 / SQL Server的应用程序中,我想将pdf文档存储为数据库中的blob。在我的模型中,我有这个属性:

public byte[] PdfData { get; set; }

读取文件并从文件流中获取字节非常简单,但在尝试保存更改时出现错误

  

字节数组截断长度为4000

这当然有道理,因为文档大于默认的4000字节限制。但我不允许将maxlength属性设置为超过8000,这太小了。我知道我可以通过使用像这样的图像数据来解决这个问题:

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

但据我了解,图像数据类型仅用于向后兼容,并且可能随时消失。我想要做的是使用varbinary(max)数据类型。但是如何设置我的模型以在SQL Server中生成此数据类型的列?

作为旁注,我目前在我的开发环境中运行SQL Server CE,但该应用程序将在部署时定位到常规SQL Server 2008数据库。不确定这是否相关。

1 个答案:

答案 0 :(得分:1)

请参阅Download and Upload images from SQL Server via ASP.Net MVC,您只需使用它来存储PDF而不是图像。同样FILESTREAM MVC: Download and Upload images from SQL Server用于基于文件流的实现。它的要点是你不仅要存储和检索大blob,还要绝对避免与byte[]的转换,因为这意味着必须首先将整个文档复制到ASP进程的实时内存中即使在中等负载下也会杀死服务器。上面的示例显示了如何使用流媒体接口进行上载和下载。