Sql server 如何在数据库中以blob的形式存储和检索文档?
在我基于MVC 3/SQL Server的应用程序中,我希望将pdf文档作为blob存储在数据库中。在我的模型中,我具有以下属性:Sql server 如何在数据库中以blob的形式存储和检索文档?,sql-server,asp.net-mvc-3,model-view-controller,blob,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(Type
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数据库。不确定这是否相关。请参见,您可以简单地使用它来存储PDF而不是图像。也适用于基于文件流的实现。其要点是,您不仅要存储和检索大blob,还要绝对避免与
byte[]
之间的转换,因为这意味着整个文档必须首先在ASP进程的活动内存中复制,即使在中等负载下,它也会杀死服务器。上面的示例显示了如何使用流接口进行上传和下载。是的,我尝试了[Column(TypeName=“varbinary(max)”]只是为了得到错误:类型varbinary(max)未使用命名空间或别名限定。只有基元类型可以在没有限定的情况下使用谢谢,Remus,这在我的情况下可能有些过分,但以后可能会有用。