检索后保存到图像列的文档被损坏

时间:2018-08-26 01:13:50

标签: c# sql-server ms-word

我正在将文档(*.docx, *.doc, *.pdf)保存到SQL Server 2012数据库的Image列中。这是部分表脚本(为简便起见,我删除了很多列)

[DocId] [int] IDENTITY(1,1) NOT NULL,
[DocDate] [datetime] NOT NULL DEFAULT (getdate()),
[DocName] [varchar](255) NOT NULL  DEFAULT (''),
[DocObject] [image] NOT NULL

正在使用此代码在C#中保存文档

using (Stream docStream = UploadResume.PostedFile.InputStream)
{
    Int32 docSize = (Int32)docStream.Length;
    byte[] docBytes = new byte[docSize + 1];
    docStream.Read(docBytes, 0, docSize);
    SaveDoc(docId, UploadResume.PostedFile.FileName.Trim(), docBytes);
}

SaveDoc是一个将数据插入表中的过程。为了简洁起见,我删除了用于保存其他数据字段的代码。

我正在将数据检索到DataTable(dt)中。我正在使用以下C#代码将文档的内容保存到文件系统中:

byte[] docBytes = (byte[])(dt.Rows[0]["DocObject"]);
var fileName = dt.Rows[0]["DocName"].ToString();
File.WriteAllBytes(Path.Combine(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Documents\\{DateTime.Now.ToString("yyyyMMdd")}"), $"{fileName}"), docBytes);

我能够将MS Word文档保存到数据库中,从数据库中检索它并将其成功保存到文件系统中。但是,当我在MS Word中打开文档时,收到一条错误消息,指示文件已损坏。 PDF文件可以保存并可以正常打开。 Microsoft Word文档不是。

1 个答案:

答案 0 :(得分:0)

感谢您的所有帮助。我把多余的字节用于测试其他内容,却忘了稍后将其删除。那就是问题所在。我删除了它,一切正常。我知道不推荐使用图像列类型。但是,该数据库是第三方商业产品的一部分,在不破坏商业应用程序的情况下不能对其进行修改。感谢您指出。欣赏它。由于我没有足够的声望点,因此我无法接受答案和投票。