【问题标题】:BCP - Exported files (docx, xlsx & pptx) are corruptedBCP - 导出的文件(docx、xlsx 和 pptx)已损坏
【发布时间】:2013-03-09 18:23:08
【问题描述】:

我正在使用以下 bcp 命令从文件流 db 中导出二进制文件,并且所有其他文件似乎都可以正常导出(即 txt、pdf、rtf、图像文件等),但 docx、xlsx 和 pptx 文件除外。我能够导出这些文件(即 docx、xlsx 和 pptx),但在打开这些文件时我收到一条警告/错误消息,然后它会正确打开文件。

BCP "SELECT content FROM [dbo].[Contents] WHERE ID=1" queryout "C:\Temp\" -T -S (local) -f C:\Temp\files.fmt

我在打开 docx、xlsx 和 pptx 文件时收到以下消息:

XLSX - Excel 发现无法读取的内容,是否要恢复此文档的内容? DOCX - 文件 test.docx 无法打开,因为内容有问题,然后 Excel 发现无法读取的内容,您要恢复此文档的内容吗?

另外,我的 files.fmt 文件中有这个:

10.0
1
1 SQLBINARY 0 0 "\t" 1 内容 ""

任何帮助将不胜感激。

【问题讨论】:

  • 也许制表符或换行符被附加为列和行终止符?不确定 bcp 是否可以导出单个 blob。
  • 你能解释一下吗?
  • 您知道 bcp 的作用以及通常如何使用它吗?它通常复制多列和多行。它们是分隔的。

标签: sql filestream bcp


【解决方案1】:

我不能 100% 确定您的问题是否与我的问题相同,但就我而言,我发现问题实际上出在 写作 部分,而不是在阅读部分。比如我原来的写代码是这样的:

Dim FILE_CONTENT(len) As Byte
File.InputStream.Read(FILE_CONTENT, 0, len)
SaveFileToDatabase(FILE_NAME, CONTENT_TYPE, FILE_CONTENT)

当我将第一行更改为以下内容时:

Dim FILE_CONTENT(0 To len - 1) As Byte 

读取错误消失了。我只是忘记了当您在未指定下限的情况下对其进行标注时,VB 实际上会默认分配 N+1 个字节(O 到 N)。请参阅此处描述的类似情况:Uploaded Docx Files are getting corrupted。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2015-02-02
    • 2016-09-06
    • 2013-10-24
    • 1970-01-01
    相关资源
    最近更新 更多