我有一些麻烦,从内存流上传文件到数据库(它在DB是可见的0X所以我想它不会正确保存)。我不知道它是否正在创建或保存从流分贝流的问题应该怎样做。

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库。

有帮助吗?

解决方案

您正在编写到流,然后立即试图从它的阅读无需倒带的......所以没有要读取的数据。

幸运的是,反正简化了代码的一个非常简单的方法:

byte[] file = stream.ToArray();

但是,你有另一个潜在的问题:

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

这将使MemoryStream具有的500K固定大小 - 没有更多不会少。我怀疑这不是你想要的东西;我建议你摆脱storage变量并调用无参数的构造函数MemoryStream

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top