繁体   English   中英

如何将文件(PDF)插入到varbinary SQL Server列中,然后检索它?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM