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

最後にコメントされたコードは、私の試みの 1 つです。

無効なパラメーター

エラー。解決策はありますか?

注:画像部分を取り出すと、すべて正常に動作します。

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 に答える