2010-03-03 21 views
6

mam pewne kłopoty, aby przesłać plik z pamięci Stream do bazy danych (jest to widoczne w DB jako 0x więc myślę, że nie zostanie poprawnie zapisana). Nie jestem pewien, czy jest to problem z tworzeniem strumienia, czy też zapisywanie do bazy danych ze strumienia powinno odbywać się inaczej.Korzystanie MemoryStream, aby zapisać plik .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(); 
     } 
    } 

Co robię źle? Używam biblioteki docx codeplex.

Odpowiedz

7

Piszesz do strumienia, a następnie natychmiast próbujesz odczytać z niego bez przewijania ... więc nie ma danych do odczytania.

Na szczęście istnieje bardzo prosty sposób na uproszczenie kodu i tak:

byte[] file = stream.ToArray(); 

jednak masz inny potencjalny problem:

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

uczyni to MemoryStream mają stałe rozmiar 500 KB - nie więcej, nie mniej. Podejrzewam, że nie tego chcesz; Proponuję pozbyć się zmiennej storage i po prostu wywołać konstruktora bez parametrów, MemoryStream.

+0

Dziękuję. Wiedziałem, że czegoś mi brakuje :-) – MadBoy

Powiązane problemy