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

时间:2009-01-14 16:23:45

标签: c# sql-server file blob

我希望获取运行报告的结果(来自Crystal Reports的PDF文件),将其序列化,将其粘贴到varbinary字段中,然后再将其反序列化并将其呈现给用户。

现在我只需要简单的旧ADO .NET(SqlClient,SqlCommand等)

这有什么陷阱吗?鉴于我知道当前保存PDF文件的本地机器上的路径,实现此目的的基本语法是什么?

2 个答案:

答案 0 :(得分:5)

编辑:刚刚在MSDN documentation中看到图片即将被移除。更好地使用VARBINARY(MAX)。 (嘿,我不知道)。

MY OLD ANSWER: VARBINARY的限制为8 KB。可能太小而无法存储PDF文件。您最好使用IMAGE数据类型。

使用参数通过SqlCommand插入/选择数据,您可以像任何普通字段一样使用纯SQL。

传递到图像字段的数据是一个字节数组。

编辑2:由于您使用的是C#,因此您应该使用DataReader检索数据。要创建DataReader,请使用SqlCommand.ExecuteReader上的SequentialAccess标志,以防止数据过早地被读入内存。

答案 1 :(得分:3)

我根本不会使用byte[]参数来IDbCommand。如果你的PDF是100 Mb大怎么办?据我所知,在将结果发送到请求的浏览器之前,这将从您的数据库中获取所有100 Mb(在服务器上需要大量内存)。现在考虑获得大约这个大小的不同PDF的大量并发请求......每秒...这不是很可扩展。

有关可能的解决方案,请查看"Blob + Stream = BlobStream",这是我几年前在荷兰为.NET杂志撰写的一篇文章。此方法使用SQL Server命令从Stream派生类访问BLOB的部分内容。

这篇文章是荷兰语,但the example代码随附它应该足以让你入门。此外,Peter De Jonghe似乎编写了一篇article on CodeProject,它对我的​​文章进行了一些扩展,将其概括为SQL Server中的image列。这篇文章是英文的。

我希望这可以帮助您解决问题。