0

Microsoft Word 2013 で行った作業を、ハードディスクではなくデータベースに保存したいと考えています。つまり、ドキュメントに書式設定されたテキスト、画像、およびスタイルが含まれていると仮定すると、ドキュメントをそのまま Microsoft SQL サーバー データベースに保存し、データベースに保存されたとおりに 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 was unhandled: オフセットと長さが配列の範囲外であるか、カウントがインデックスからソース コレクションの末尾までの要素数を超えています。

4

1 に答える 1

0

使用している方法は非常に非効率的であり、プロセスをお勧めしませんが、コードが失敗する理由は長さです....保存するときにMemoryStream長さを設定していますがint len = Application.ActiveDocument.Content.StoryLength;、取得しようとすると、int len = int.MaxValue;データストリームの終わりをはるかに超えて設定しています。

于 2013-09-14T22:46:24.743 に答える