0

我想将我在 Microsoft Word 2013 中完成的工作保存到数据库而不是硬盘上。也就是说,假设文档包含格式化的文本、图片和样式,我想将文档按原样保存在 Microsoft SQL Server 数据库中,并且能够检索到保存在数据库中的 ms word。

我非常需要帮助,拜托!!!

下面是我用来将word文档保存到sql数据库的代码:

    public void SaveNewDocument()
    {
        try
        {

            int len = Application.ActiveDocument.Content.StoryLength;
            byte[] docData = new byte[len];

            using (MemoryStream ms = new MemoryStream())
            {
                ms.Read(docData, 0, len);
                this.table_2TableAdapter.Insert("FirstFile", docData);
            }

        }
        catch (Exception x)
        {
            MessageBox.Show(x.Message, "Save", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

当我去数据库时,数据就在那里。

以下是我用来从数据库中检索的代码,但它不起作用:

    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {
        this.GetExistingFile();
    }

    private void GetExistingFile()
    {
        this.table_2TableAdapter.Fill(this.officeAppDataSet.Table_2);

        var query = from f in this.officeAppDataSet.Table_2.AsEnumerable()
                    where f.Id == 4
                    select f;
        foreach (var mFile in query)
        {
            string fileName = mFile.FileName;
            byte[] fileData = mFile.FileData;
            int len = int.MaxValue;
            using (MemoryStream ms = new MemoryStream())
            {
                ms.Write(fileData, 0, len);
            }
        }
    }

下面是错误消息: ArgumentException 未处理:偏移量和长度超出了数组的范围或计数大于从索引到源集合末尾的元素数。

4

1 回答 1

0

您使用的方法效率极低,我不推荐该过程,但是您编码失败的原因是您的长度....当您保存时,您MemoryStream正在设置长度int len = Application.ActiveDocument.Content.StoryLength;,但是当您尝试检索它时,您正在设置它将int len = int.MaxValue;远远超出数据流的末尾。

于 2013-09-14T22:46:24.743 回答