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中有图片。
有什么想法吗?
答案 0 :(得分:3)
我看到这个问题已经有10个月了。我希望能提供帮助还为时不晚。
DB2和任何其他允许“Blob”数据类型的数据库都不知道数据来自.docx文件,或者做任何会导致Word抱怨的事情。数据应该是您传递给它的任何数据的精确副本。
同样,Word文档并不“知道”它已被复制到BLOB对象然后再回来。
因此,问题几乎可以肯定是您在一个或两个程序中处理BLOB数据。
请运行您的第一个程序将.docx文件复制到数据库中,然后运行第二个程序将其读回。然后使用逐字节工具来比较这两个文件。一种方法是打开命令窗口并输入:
fc/b Doc1.docx Doc2.docx
如果您可以访问一些更好的比较工具,请务必使用它们......但请确保它查看每个字节,而不仅仅是可打印的字符。
显然,你 ARE 会发现差异,否则当第一个就好的时候,Microsoft Word不会在第二个上给你错误。一旦你看到差异是什么,希望你能理解出了什么问题以及如何解决它们。
几年前我遇到过类似的问题(我正在存储图形,但这是基本的问题)。事实证明文档大小正在受到影响 - 我会将8005个字节存储到BLOB对象中,当我读回它时,我得到了8192个字节。 NUL(0)字节被附加到数据的末尾。
我当时的解决方案是在将BLOB数据写入数据库时将“X”附加到BLOB数据的末尾。然后,当我读回它时,我将搜索数据中的最后一个“X”并将其删除,以及之后的任何数据。这样,我就可以恢复原始数据。我应该做的是将数据长度与BLOB数据一起存储在数据库中。然后,您可以将文件截断为该大小,从而消除损坏。
如果附加的NUL字节不是您的问题,那么您需要做一些其他事情来解决问题。但是在你知道改变了什么之前,你没有任何线索。确实有所作为。