从Access数据库中检索图像

请允许任何人帮我这个代码?

我试图从Access数据库中检索图像..

private void btnRetrieve_Click_1(object sender, EventArgs e) { //Save Temporarily that image bytes in one location and give that path to picture box con.Open(); cmd = new OleDbCommand("select pic from shapes2 where ID= 1", con); da = new OleDbDataAdapter(cmd); da.Fill(dt); if (dt.Rows.Count > 0) { if (dt.Rows[0]["pic"] != DBNull.Value) { pictureBox4.Image = ByteArrayToImage((Byte[])dt.Rows[0]["pic"]); } } con.Close(); } Bitmap ByteArrayToImage(byte[] b) { MemoryStream ms = new MemoryStream(); byte[] pData = b; ms.Write(pData, 0, Convert.ToInt32(pData.Length)); Bitmap bm = new Bitmap(ms, false); ms.Dispose(); return bm; } 

这似乎是一个常见问题,请参阅讨论: 从Access读取图像 – 参数无效

问题是图像可以以不同的格式存储在Access数据库中:二进制blob或作为OLE对象。

我不知道你在Access数据库中使用了哪一个,但如果它保存为直接的二进制blob,那么它就是图像本身,所以你的代码应该可以工作。

由于您遇到了问题,这可能意味着图像的存储方式不同:作为OLE对象。 在这种情况下,存在与图像数据一起存储的元数据,并且元数据使得到达图像更加困难,因为您必须以这种或那种方式将其剥离。 OLE元数据的长度可变,因此您不能跳过它。
我看到它做的最好的方法是通过尝试在OLE blob中找到它的“幻数”来找到图像文件的开头。

以下文章和问题将告诉您如何:

  • 从存储在MS Access DB中的图像中删除OLE标头作为OLE对象
  • 从Access DB中提取OLE对象(pdf) (类似的技术也可以适应jpg / gif / etc图像)