7

我在将文件从 Memory Stream 上传到数据库时遇到了一些麻烦(它在 DB 中显示为 0x,所以我猜它没有正确保存)。我不确定创建 Stream 或从流保存到 db 是否存在问题应该以不同的方式完成。

private void test {
        byte[] storage = new byte[500000];
        using (MemoryStream stream = new MemoryStream(storage))
        DocX documentWord = DocX.Create(stream);
        // some stuff
        documentWord.Save(); 
        databaseFilePut(stream);
}


public static void databaseFilePut(MemoryStream stream) {
        byte[] file;
        using (var reader = new BinaryReader(stream)) {
                file = reader.ReadBytes((int) stream.Length);
               // reader.Close();
        }
            //stream.Close();
        //}
        using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP))
        using (var sqlWrite = new SqlCommand("INSERT INTO Raporty (RaportPlik) Values(@File)", varConnection)) {
            sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;
            sqlWrite.ExecuteNonQuery();
        }
    }

我究竟做错了什么?我正在使用 Docx codeplex 库。

4

1 回答 1

7

您正在写入流,然后立即尝试从中读取而不倒带......所以没有要读取的数据。

幸运的是,无论如何,有一种非常简单的方法可以简化代码:

byte[] file = stream.ToArray();

但是,您还有另一个潜在问题:

byte[] storage = new byte[500000];
using (MemoryStream stream = new MemoryStream(storage))
...

这将使MemoryStream固定大小为 500K -不多也不少。我怀疑这不是你想要的;我建议你摆脱storage变量,只调用无参数MemoryStream构造函数。

于 2010-03-03T10:16:29.827 回答