2013-03-09 137 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。希望有所幫助。