我想在数据库中保存word文档,我这样做:
FileStream st = new FileStream(filePath, FileMode.Open);
byte[] buffer = new byte[st.Length];
st.Read(buffer, 0, (int)st.Length);
st.Close();
//save Buffer into DB
//myentityobject.FileContent = buffer;
//save it
但是当我想阅读它时,我不知道如何从我从DB.i获得的流中创建一个word文档尝试这样的事情:
var doc = myentityobject.FileContent;
MemoryStream stream = new MemoryStream(doc as byte[]);
letterPatternDoc = new Document(stream);
filePath = @"D:\LetterPatternDocument001.doc";
object oMissing = System.Reflection.Missing.Value;
currentApp = new wd.Application();
currentApp.Visible = true;
currentDoc = currentApp.Documents.Add(Type.Missing, Type.Missing);
currentDoc = doc;
currentDoc.SaveAs(ref path, oMissing, oMissing, oMissing, oMissing, oMissing, false
, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
但它不起作用。
编辑:
我改变了代码并且它现在正常工作,我通过文件流保存文件,然后读取它。但我不知道这是一个很好的解决方案吗?
FileStream fileSream = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fileSream);
bw.Write(FileContent);//filecontent is a byte[]
fileSream.Close();
// WordDoc.OpenDocument(filePath);
答案 0 :(得分:0)
你可以试试这个方法: 将文件保存到某个地方,并将文件路径保存到数据库。当您想要读取此文件时,您可以从database.hope获取文件路径,它可以帮助您:)
答案 1 :(得分:0)
尝试序列化文档对象,从而保留文档状态并将其保存在db中。在阅读反序列化时,文档对象将再次可供您显示。
答案 2 :(得分:0)
单词无法打开流,但您可以保存,修改它,然后在数据库中更新后,只需删除此“临时”文件
答案 3 :(得分:0)
如果您不想使用 FileStream ,您还可以利用System.IO.File
命名空间中内置的 WriteAllBytes 静态方法。
这是一个简短的例子(假设安装并引用了 Interop.Word ):
// byte[] fileBytes = getFileBytesFromDB();
var tmpFile = Path.GetTempFileName();
File.WriteAllBytes(tmpFile, fileBytes);
Application app = new word.Application();
Document doc = app.Documents.Open(filePath);
// do your stuff
// convert the DOCX file back to a Byte Array
doc.Close();
app.Quit(); // VERY IMPORTANT: do this to close the MS Word instance
byte[] newFileBytes= File.ReadAllBytes(tmpFile);
File.Delete(tmpFile);
有关此主题的其他信息,您还可以在我的博客上read this post。