从DB检索图像时参数无效

最后,我想从Access数据库中获取一个OLE类型的图像并将其放入一个图片框中。 在C#和MS Access 2010中使用Visual Studio 2012.我的解决方案是一个非Web相关的应用程序。

所以这是查询代码。 我正在构建一个对象( Equipamento ),其中包含一个System.Drawing.Image属性,这是该问题的焦点。

 OleDbConnection l = OleDbConnectionDAO.createConnection(); Equipamento eq = new Equipamento(); try { OleDbDataAdapter adapter = new OleDbDataAdapter( "SELECT * FROM [APP_Equipamento_Geral] WHERE COD_ETIQ like '%" + codigo + " %'", l); DataSet ds = new DataSet(); adapter.Fill(ds, "[APP_Equipamento_Geral]"); string s = ds.Tables["[APP_Equipamento_Geral]"].Columns[16].ColumnName; foreach (DataRow row in ds.Tables["[APP_Equipamento_Geral]"].Rows) { eq.NInventario = row["Codigo"].ToString(); eq.Modelo = row["MODELO"].ToString(); eq.Marca = row["Marca_"].ToString(); eq.GamaMedida = row["Gama Medida"].ToString(); if (row["FOTO"] != DBNull.Value && row["FOTO"] != null) { byte[] b = new byte[0]; b = (byte[])row["FOTO"]; eq.Img = getImageFromBytes(b);//Error caught here } //if (row["FOTO"] != DBNull.Value && row["FOTO"] != null) //{ // byte[] b = (byte[])row["FOTO"]; // MemoryStream ms = new MemoryStream(b); // eq.Img = Image.FromStream(ms); //Error caught here //} } } 

这是辅助方法:

 private Image getImageFromBytes(byte[] myByteArray) { System.IO.MemoryStream newImageStream = new System.IO.MemoryStream(myByteArray, 0, myByteArray.Length);\ return Image.FromStream(newImageStream, true); } 

最后评论的一段代码是我的另一个尝试,也给了

无效的参数

错误。 有解决方案?

注意:如果我取出图像部分,一切正常。

存储为OLE object的图像与序列化的System.Drawing.Image具有不同的格式。 这就是我问图像是如何存储的原因。

虽然我无法保证这一点,但从未个人使用过,我们建议使用以下代码。 据推测,它使用MS的GDI + lib(包含在Win标准安装中)来导入/导出Access OLE中的图片。

http://sofzh.miximages.com/c%23/ppre codepublic byte[] imageToByteArray(System.Drawing.Image imageIn) { MemoryStream ms = new MemoryStream(); imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif); return ms.ToArray(); }

将arraybite重新转换为图像使用它

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