![](/img/trans.png)
[英]How do I insert/retrieve Excel files to varbinary(max) column in SQL Server 2008?
[英]How do you insert a file (PDF) into a varbinary SQL Server column and later retrieve it?
我希望获取运行报告的结果(Crystal Reports的PDF文件),序列化它,将其粘贴到varbinary字段中,然后再将其反序列化并将其呈现给用户。
现在我只需要简单的旧ADO .NET(SqlClient,SqlCommand等)
这有什么陷阱吗? 鉴于我会知道本地机器上当前保存PDF文件的路径,实现此目的的基本语法是什么?
编辑:刚刚在MSDN文档中看到Image将被删除 。 更好地使用VARBINARY(MAX)。 (嘿,我不知道那个)。
我的老答案: VARBINARY的限制为8 KB。 可能太小而无法存储PDF文件。 您最好使用IMAGE数据类型。
使用参数通过SqlCommand插入/选择数据,您可以像任何普通字段一样使用纯SQL。
传递到图像字段的数据是一个字节数组。
编辑2:由于您使用的是C#,因此您应该使用DataReader检索数据。 要创建DataReader,请使用SqlCommand.ExecuteReader上的SequentialAccess标志,以防止数据过早地被读入内存。
我真的不会将一个byte[]
参数用于IDbCommand
。 如果你的PDF是100 Mb大怎么办? 据我所知,在将结果发送到请求的浏览器之前,这将从您的数据库中获取所有100 Mb(在服务器上需要大量内存)。 现在考虑获得大约这个大小的不同PDF的大量并发请求......每秒...这不是很可扩展。
有关可能的解决方案,请查看“Blob + Stream = BlobStream” ,这是我几年前在荷兰为.NET杂志撰写的一篇文章。 此方法使用SQL Server命令从Stream
派生类访问BLOB的各个部分。
这篇文章是荷兰语,但与之相关的示例代码应该足以让您入门。 此外,Peter De Jonghe似乎已经在CodeProject上撰写了一篇文章,该文章对我的文章进行了一些扩展,将其概括为不仅仅是SQL Server中的image
列。 这篇文章是英文的。
我希望这可以帮助您解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.