从数据库检索图像时参数无效

本文关键字:参数 无效 图像 数据库 检索 | 更新日期: 2023-09-27 18:37:23

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

所以这是查询代码。我正在构造一个对象(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+ 库(包含在 Win 标准安装中)将图片导入/导出到 Access OLE 或从 Access OLE 导出图片。

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

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

将MS Access"OLE 对象"转换回普通 JPEG - 最佳方法?

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

如果要将图像转换为数组咬合,请使用此功能

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;
}