2

ASP.net 应用程序将 Microsoft Windows 2007 .docx 文件插入 DB2 OS/390 Blob 表的一行中。另一个 VB.net 应用程序获取 DB2 OS/390 Blob 数据。VB.net 应用程序启动 Microsoft Word 以打开 .docx 文件,但随后 Microsoft Word 弹出一条消息,指出数据已损坏。Word 将允许您修复数据,以便可以查看文件,但这是额外的步骤并且用户抱怨。

我已经看到了一些 .docx 可以转换为 .doc 的示例,但他们只谈论剥离文本。我们的一些 .docx 文件中有图片。

有任何想法吗?

4

1 回答 1

3

我看到这个问题已经 10 个月大了。我希望现在提供帮助还为时不晚。

DB2 和任何其他允许“Blob”数据类型的数据库都不会知道数据来自 .docx 文件,或者做任何会导致 Word 抱怨的事情。数据应该是您传递给它的任何数据的精确副本。

同样,Word 文档也不“知道”它已被复制到 BLOB 对象,然后又返回。

因此,几乎可以肯定,问题在于您在一个或两个程序中处理 BLOB 数据。

请运行您的第一个程序将 .docx 文件复制到数据库中,然后运行第二个程序将其读回。然后使用逐字节工具比较两个文件。一种方法是打开命令窗口并键入:

fc/b Doc1.docx Doc2.docx

如果您可以使用一些更好的比较工具,请务必使用它们……但请确保它查看每个字节,而不仅仅是可打印的字符。

显然,你发现差异,否则 Microsoft Word 不会在第二个问题上给你错误,而第一个问题就很好。一旦你看到了不同之处,希望你会明白哪里出了问题以及如何解决它们。

几年前我遇到过类似的问题(我正在存储图形,但这是相同的基本问题)。事实证明,文档大小受到了影响——我将 8005 个字节存储到 BLOB 对象中,当我读回它时,我得到了 8192 个字节。NUL (0) 字节被附加到数据的末尾。

我当时的解决方案是在将 BLOB 数据写入数据库时​​在其末尾附加一个“X”。然后,当我读回它时,我会在数据中搜索最后一个“X”并将其连同其后的任何数据一起删除。这样,我可以恢复原始数据。我应该做的是将数据长度与 BLOB 数据一起存储在数据库中。然后您可以将文件截断为该大小,从而消除损坏。

如果附加的 NUL 字节不是您的问题,那么您需要做其他事情来解决问题。但是,在您知道发生了什么变化之前,您不会有任何线索。有什么事情发生了。

于 2011-03-17T23:48:28.357 回答