1

最后,我想从 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);
}

最后一段注释的代码是我的另一个尝试,它也给出了

无效的参数

错误。有什么解决办法吗?

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

4

2 回答 2

1

存储为 的图像与OLE object序列化的System.Drawing.Image. 这就是为什么我问图像是如何存储的。

虽然我不能保证这一点,但我从未亲自使用过它,但强烈推荐使用以下代码。据说,它使用 MS 的 GDI+ 库(包含在 Win 标准安装中)将图片导入/导出到 Access OLE。

http://www.access-im-unternehmen.de/index1.php?BeitragID=337&id=300

您可以在此链接中找到其他建议(包括从 Access 中提取图像的实用程序):

将 MS Access“OLE 对象”转换回纯 JPEG——最好的方法?

于 2013-10-30T16:43:18.530 回答
0

您不能仅使用强制转换将图像或字符串转换为 arraybite。

如果要将图像转换为 arrayBite,请使用此函数

public 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;
}
于 2013-10-30T12:03:04.360 回答