从access数据库中检索图像

本文关键字:检索 图像 数据库 access | 更新日期: 2023-09-27 18:06:40

请问谁能帮我在这个代码??

我正试图从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读取图像-参数无效

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

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

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

下面的文章和问题将告诉你如何做:

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