2010-03-03 29 views
6

Tengo algunos problemas para cargar archivos desde Memory Stream a la base de datos (está visible en DB como 0x, así que supongo que no se guarda correctamente). No estoy seguro de si se trata de un problema con la creación de Stream o si guardar en db from stream debe hacerse de manera diferente.Uso de MemoryStream para guardar el archivo .docx C#

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 usando la biblioteca Codeplex de Docx.

Respuesta

7

Estás escribiendo en la corriente y luego inmediatamente tratando de leer sin rebobinar ... así que no hay datos para leer.

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

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 tienen una fijo tamaño de 500 K - no más, no menos. Sospecho que eso no es lo que quieres; Le sugiero que se deshaga de la variable storage y simplemente llame al constructor sin parámetros MemoryStream.

+0

Gracias. Sabía que me faltaba algo :-) – MadBoy

Cuestiones relacionadas