2013-03-09 44 views
1

我正在使用下面的bcp命令从filestream db导出二进制文件,并且所有其他文件似乎都可以正常导出(即txt,pdf,rtf,图像文件&等),但docx,xl​​sx & pptx文件。我可以导出这些文件(即docx,xl​​sx & pptx),但在打开这些文件时收到警告/错误消息,然后正确打开文件。BCP - 导出的文件(docx,xl​​sx和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无法打开bcos内容存在问题,然后Excel发现无法读取的内容,您是否想要恢复此文档的内容?

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

10.0
1 SQLBINARY 0 0 “\ t” 的1项内容 “”

任何帮助将非常感激。

+0

也许制表符或换行符被添加为列和行结束符?不确定bcp可以导出一个blob。 – usr 2013-03-09 20:27:24

+0

你能解释我吗? – user972255 2013-03-09 20:59:46

+0

你知道bcp做什么以及它通常如何使用?它通常复制多列和多行。他们是划定的。 – usr 2013-03-09 21:02:13

回答

0

我不是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。希望有所帮助。