在SQL Server中保存PDF

时间:2014-09-24 17:36:46

标签: c# sql-server

从我们的数据库架构中我认为我们正在SQL Server中保存图像,我在ImageContents(text null)表中找到了一个名为Images的列。

现在我有一个包含大量PDF文件的文件夹,我想将它们保存在该表中。

我们如何做到这一点?为什么是文本类型列?

我用Google搜索了主题但主要是他们说将图像保存在其他地方,并在SQL Server中保存到其地址的链接,但这不是我们这样做的,所以我自己找不到答案。

2 个答案:

答案 0 :(得分:1)

由于您遇到了文本字段,并且您有二进制数据,因此您需要将二进制数据编码为文本列中的内容,并且当您将其取出时还需要对其进行解码试。

Base 64编码是一种方法。 (请注意,编码形式将占用更多空间。)

Convert.ToBase64String(bytes)Convert.FromBase64String(string)可以让你来回,就像在this example中一样。 (对于字节数组步骤,请使用File.ReadAllBytes或查看Vinikov's link。)

同样,在数据库中存储路径和文件名可能会更好,并将PDF文件保存在文件系统中,但我知道在这种情况下你没有选择这样做。

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

答案 1 :(得分:0)

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

不要使用Text(或varchar(max)或nvarchar(max))类型的列,因为实际上可能会破坏您的PDF文件。

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