【问题标题】:insert a word document into sql server database?将word文档插入sql server数据库?
【发布时间】:2012-01-29 07:55:27
【问题描述】:

对于上述任务需要使用的各种技术,我感到非常不知所措。我已经搜索了堆栈溢出库存,但无法确定执行此操作的步骤的可靠检查列表。

我想大致了解将 Word 文档插入数据库时​​需要使用的步骤/工具。

我想过:

  1. 将 word 文件作为 FileStream 读取。
  2. 将其反序列化为 xml 对象(字 ml)。
  3. 不知何故(不确定如何)将单词 ml 插入到 sql server 的 xml 列中。

是否可以使用 XMLSerializer 对象读取单词 ml ?然后我将如何将其插入数据库?

编辑: 我实际上需要对存储的数据执行操作,例如使用 xpath 查找节点,因此我需要将其存储为 xml...

【问题讨论】:

  • 您需要doc这个词的实际“图形”表示,还是只需要其中的文本?您可以根据自己的目标以不同的方式处理它。
  • 您想让它在数据库中可搜索吗?如果没有,您最好将其保存为 blob - 二进制格式,以节省空间。如果要使其全文可搜索,则需要将其另存为文本。我不知道你为什么要 xml 序列化它
  • Word 文档是否需要存储为 XML 或 Word 2003 中的 .doc 格式?
  • 即使您进行了编辑,我认为答案也不会发生太大变化。您仍然需要将字节读入缓冲区 - 因此将数据获取到可以运行 xpath 的位置的方式仍然相同。

标签: c# sql-server xmlserializer wordml


【解决方案1】:

您应该使用 FileStream 或普通的 BLOB 存储。 FileStream 确实需要更多的初始工作,并且我在升级某些已安装的数据库以使用它时遇到了问题。根据您重新安装服务器以使其正常工作的能力/意愿,您当然应该在走得太远之前进行概念验证。从技术上讲,我从来没有遇到过使用 BLOB 的问题

根据您的使用模式,已经进行了一些研究,以确定应该首选哪一个。 IE。如果您的文件平均大于 1Mb,并且您需要快速读取访问权限,则最好使用 FileStream。

我自己很少看到性能差异,但从设计角度来看,我确实更喜欢 FileStream。

看看:

http://technet.microsoft.com/en-us/library/bb933993.aspx

http://www.mssqltips.com/sqlservertip/1489/using-filestream-to-store-blobs-in-the-ntfs-file-system-in-sql-server-2008/

【讨论】:

    【解决方案2】:

    我认为您无法使用 XML 来执行此操作;我相信 Word 文档中有二进制内容。我会尝试使用 FileStream 并将其作为varbinary(max) 存储在数据库中。这当然是最通用和最灵活的处理方式,如果您选择稍后扩展功能,您将能够重用您为任何其他文件类型编写的代码。

    【讨论】:

    • 当 Filestream 工作时,我会说它和 varbinary 在可重用性方面没有区别。我错了吗?
    • @AndersUP 我将 FileStream 称为用于读取文件字节数据的 C# 对象。我没有意识到有一个 Sql FileStream!
    【解决方案3】:

    大多数情况下,如果要在数据库中“按原样”存储文件,则将其存储为“BLOB”或“Binary Large OBject”。

    这是一篇关于如何将 BLOB 数据读写到 MSSQL 的文章: http://www.codecapers.com/post/manipulating-blob-data-in-mssql-with-c.aspx

    如果您的文档的某些部分也需要从数据库中搜索,您可以将 BLOB 创建为列,并且这些项目(如类别、关键字、创建日期、所有者等)仍然具有其他列或表关系)

    【讨论】:

    • 提供的链接现已失效。
    【解决方案4】:

    实际上 word 格式 (2010+) 是一个包含一堆 XML 的 zip :)。我建议使用 varbinary 或 text 列。

    【讨论】:

      【解决方案5】:

      您可以查找创建 byte[] 流以及在 google Microsoft.Interop 上查找,在线 MDSN 上有大量示例

      如果您想要序列化,请查看 BinaryStreaming CodeProject.com 以及 Stackoverflow 将提供大量来自过去用户/问题和解决方案的示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        • 1970-01-01
        相关资源
        最近更新 更多