2010-03-03 9 views
6

J'ai des problèmes pour télécharger un fichier depuis le flux de mémoire vers la base de données (il est visible dans DB comme 0x, donc je suppose qu'il n'est pas enregistré correctement). Je ne suis pas sûr que ce soit un problème avec Stream en cours de création ou enregistrer en DB à partir de flux devrait être fait différemment.Utilisation de MemoryStream pour enregistrer le fichier .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'est-ce que je fais mal? J'utilise la bibliothèque Docx codeplex.

Répondre

7

Vous écrivez dans le flux et vous essayez immédiatement de le lire sans rembobiner ... donc il n'y a pas de données à lire.

Heureusement, il y a un moyen très facile de simplifier le code de toute façon:

byte[] file = stream.ToArray(); 

Cependant, vous avez un autre problème potentiel:

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

Cela rendra les MemoryStream ont une fixe taille de 500K - pas plus, pas moins. Je soupçonne que ce n'est pas ce que tu veux; Je suggère que vous vous débarrassiez de la variable storage et appelez simplement le constructeur MemoryStream sans paramètre.

+0

Merci. Je savais qu'il me manquait quelque chose :-) – MadBoy

Questions connexes