2013-01-15 107 views
0

我在顯示存儲在我的MySQL數據庫中的圖片時遇到問題。 我不知道我是否已經成功地存儲,但使用此功能,轉換圖像到一個blob文件,這裏的功能是:如何將BLOB轉換爲圖片

private byte[] imageToByteArray(Image imageIn) 
{ 
    MemoryStream ms = new MemoryStream(); 
    imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
    return ms.ToArray(); 
} 

當我檢查我的數據庫,它說BLOB藍色亮點。現在,我想在我的照片箱中顯示圖像。我也有一個功能轉換成字節數組圖像..

private Image byteArrayToImage(byte[] byteArrayIn) 
{ 
    MemoryStream ms = new MemoryStream(byteArrayIn); 
    ms.Position = 0; 
    Image returnImage = Image.FromStream(ms); 
    return returnImage; 
} 

當我運行應用程序,它說:

ArgumentException的是unheld,參數無效

我已嘗試使用此語法:

pictureBox1.Image = byteArrayToImage(dr["img"] as byte[]); 

或者我在想如果我應該轉換首先將BLOB初始化爲字節數組?然後使用該函數將字節數組轉換爲Image?
當我點擊的名稱,它應該顯示的信息,遺憾的是,我收到的參數異常..

int i = dataGridView1.SelectedCells[0].RowIndex; 
string firstname = dataGridView1.Rows[i].Cells[0].Value.ToString(); 
string lastname = dataGridView1.Rows[i].Cells[1].Value.ToString(); 

Connection connect = new Connection(); 
MySqlConnection mySqlConnect = new MySqlConnection(connect.connString()); 
mySqlConnect.Open(); 

string s = "SELECT * FROM tbl_contacts WHERE username = '" + label1.Text + "' and (fname = '" + firstname + "' and lname = '" + lastname + "')"; 

MySqlCommand mySQL = new MySqlCommand(s, mySqlConnect); 
mySQL.ExecuteNonQuery(); 
MySqlDataReader dr = mySQL.ExecuteReader(); 

if (dr.HasRows) 
{ 
    dr.Read(); 
    txtFname.Text = dr["fname"].ToString(); 
    txtLname.Text = dr["lname"].ToString(); 
    txtBday.Text = dr["birthday"].ToString(); 
    txtEmail.Text = dr["email"].ToString(); 
    txtMobile.Text = dr["mobile"].ToString(); 
    txtAddress.Text = dr["address"].ToString(); 
    txtNotes.Text = dr["notes"].ToString(); 
    pictureBox1.Image = byteArrayToImage(dr["img"] as byte[]); 
} 
+0

在第一或第二位代碼中拋出ArguementException的位置在哪裏?另外,你如何從數據庫中檢索數據? – Nashibukasan

+2

如果你在調試器中運行它,應該給你一個選項來檢查ArgumentException。這應該a)給你參數的*名稱*無效,b)顯示* shere *的堆棧跟蹤正在被拋出。不知道這些信息中的一個或兩個,我們可能會猜測幾天。 –

+0

你能告訴什麼'dr [「img」]。GetType()'返回? –

回答

0

嘗試類似的東西:

byteArrayToImage(dr.GetSqlBytes(dr.GetOrdinal("img")).Buffer); 
0

ArgumentException was unheld, Parameter is not valid是由於損壞的圖像。您的圖像沒有正確保存。保存byte[]您已收到磁盤中的某個文件,並嘗試將其重命名爲.jpg.png並嘗試打開。

二進制數據的損壞是由於各種原因發生的,二進制數據的Length未被保存或修剪。如果您的數據庫配置爲存儲5kb有人編寫代碼將數據修剪到5kb而不是引發異常或附加緩衝區編碼不正確導致丟失最後幾個字節。