Pregunta

Tengo algunos problemas para cargar el archivo de la memoria corriente a la base de datos (que es visible en DB como 0x, así que supongo que no quede guardado correctamente). No estoy seguro de si se trata de un problema con la secuencia que se está creando o guardar en dB de la corriente que se debe hacer de manera diferente.

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();
        }
    }

¿Qué estoy haciendo mal? Estoy utilizando la biblioteca de codeplex docx.

¿Fue útil?

Solución

Usted está escribiendo a la corriente y luego inmediatamente tratando de leer de él sin rebobinado ... así que no hay datos a leer.

Afortunadamente, hay una manera muy fácil de simplificar el código de todas formas:

byte[] file = stream.ToArray();

Sin embargo, usted tiene otro problema potencial:

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

Esto hará que el MemoryStream tiene un tamaño fijo de 500K - ni más ni menos. Sospecho que no es lo que quiere; Sugiero a deshacerse de la variable storage y simplemente llama al constructor sin parámetros MemoryStream.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top