2014-03-30 53 views
0

我正在用SQLCe數據庫開發一個winform C#應用程序。以相同的格式檢索先前存儲的字節數組c#

當我將圖像上載(和其顯示給圖片框)

它完美 - 字節數組被轉換成圖像,並且在圖片框顯示。

這是我如何更新到數據庫(完美的作品):

string query = "UPDATE Company SET [email protected];"; 
SqlCeCommand cmd = new SqlCeCommand(query, con); 
cmd.Parameters.AddWithValue("Logo", SqlDbType.Image).Value = imageArray; 
int affectedRow = cmd.ExecuteNonQuery(); 

然而,當我從數據庫中檢索此數據:

private void getImageBytes() 
{ 
    DataTable dt = new DataTable(); 
    string query = "SELECT LOGO FROM ECompany;"; 
    SqlCeDataAdapter da = new SqlCeDataAdapter(query, con); 
    da.Fill(dt); 
    return Encoding.ASCII.GetBytes(dt.Rows[0][0].ToString()); 
} 
//snippet where error occurs: 
using (MemoryStream ms = new MemoryStream(imageArray)) 
{ 
    ms.Write(imageArray, 0, imageArray.Length); 
    ms.Seek(0, SeekOrigin.Begin); 
    companyLogoPB.Image = Image.FromStream(ms); //ERROR 
} 

我得到了一個錯誤:參數無效。我的猜測是返回的字節不是以相同的格式編碼的。任何想法我應該如何檢索存儲的圖像字節[](工作)?

回答

0

這就是問題所在:

return Encoding.ASCII.GetBytes(dt.Rows[0][0].ToString()); 

你的值轉換爲字符串。這不是文本數據 - 只是不這樣做!

期望你能值只投給byte[]

return (byte[]) dt.Rows[0][0]; 

還要注意的是,當你裝載的形象,你會用更好:

companyLogoPB.Image = Image.FromStream(new MemoryStream(byteArray)); 

這是簡單的代碼(你不需要寫字節數組,然後搜索),它是更容易的工作,太 - 當您使用Image.FromStream,接替自己流的流量,所以你不應該自己處理它。

+0

啊我很傻。我試着返回(byte [])dt.Rows [0] [0] .ToString()..它現在工作。感謝更簡單的代碼! –

相關問題