2010-03-03 103 views
6

我從Memory Stream上傳文件到數據庫(它在數據庫中可見爲0x,所以我猜它不能正確保存)。我不確定這是否是Stream創建時出現的問題,或者應該以不同的方式保存到數據流。使用MemoryStream保存.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(); 
     } 
    } 

我在做什麼錯?我正在使用Docx codeplex庫。

回答

7

您正在寫入流,然後立即嘗試從中讀取而沒有倒回 ...所以沒有數據可讀。

幸運的是,反正簡化了代碼的一個非常簡單的方法:

byte[] file = stream.ToArray(); 

但是,你已經得到了另一個潛在的問題:

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

這將使MemoryStream固定大小500K - 不多,不少。我懷疑這不是你想要的;我建議你擺脫storage變量,只需調用無參數MemoryStream構造函數。

+0

謝謝。我知道我錯過了一些東西:-) – MadBoy 2010-03-03 10:29:37