正在SQL Server中保存PDF

本文关键字:保存 PDF Server SQL 正在 | 更新日期: 2023-09-27 18:24:11

从我们的DB架构中,我认为我们正在SQL Server中保存图像,我在Images表中发现了一个名为ImageContents(text null)的列。

现在我有一个文件夹,里面有很多PDF文件,我想把它们保存在那个表中。

我们该怎么做?为什么它是文本类型的列?

我在谷歌上搜索了这个话题,但他们大多说把图像保存在其他地方,并在SQL Server中保存到其地址的链接,但我们不是这样做的,所以我自己找不到答案。

正在SQL Server中保存PDF

由于您被一个文本字段卡住,并且您有二进制数据,因此您需要将二进制数据编码为文本列中的内容,并且在再次取出时还必须对其进行解码。

基本64编码是实现这一点的一种方法。(请注意,编码的表单将占用更多的空间。)

Convert.ToBase64String(字节)和Convert.FromBase64String(字符串)应该会让您来回切换,如本例所示。(对于字节数组步骤,请使用File.ReadAllBytes或参阅Vinikov的链接。)

同样,最好在数据库中存储路径和文件名,并将PDF文件保存在文件系统中,但我知道在这种情况下,您无法选择这样做。

p.S.SQL Server现在在varbinary(max)字段上有一个FileStream属性,它将在文件系统中存储这样的大文件(尽管您必须启用并配置它)。同样,我理解在这种情况下您不能选择使用varbinary(max)。

如果您已经在数据库中存储图像,请再次查看,可能会发现一列类型为Image或varbinary(max)。这是你需要存储你的PDF文件,因为它们是二进制文件,而不是文本文件。可能你可以使用与你已经用于存储图像的代码类型相同的代码;如果这样的代码可用。否则,在互联网上找到如何将图像文件存储到image或Varbinary(max)类型的列中应该不会有任何问题。存储PDF文件与存储图像文件完全相同;除了元数据的提取(例如解码图像的宽度和长度)和后缀的检查(.GIF、.PNG等)。

不要使用Text(或varchar(max)或nvarchar(max))类型的列,因为这确实有可能损坏您的PDF文件。

使用较旧版本的SQL Server,如6.5或7.0;在数据库中存储文件确实存在性能问题,但这些问题已得到纠正。