繁体   English   中英

使用C#从Access数据库检索图像

[英]retrieve image from access database using c#

我正在使用以下代码将二进制格式的图像添加到ms Access数据库。 我存储此图像的数据库中的字段数据类型是OLE Object

reader [“ Photo”]的值如下

(byte[])reader["Photo"] {byte[26]}  
byte[] [0]  83 byte [1] 0   byte [2] 121    
byte [3]    0   byte [4]    115 
byte [5]    0   byte [6]    116 
byte [7]    0   byte [8]    101 
byte [9]    0   byte [10]   109 
byte [11]   0   byte [12]   46  
byte [13]   0   byte [14]   66  
byte [15]   0   byte [16]   121 
byte [17]   0   byte [18]   116 
byte [19]   0   byte [20]   101 
byte [21]   0   byte [22]   91  
byte [23]   0   byte [24]   93  
byte [25]   0   byte

    private byte[] imageToByteArray()
    {
        //Store the profile image to the database in binary format
        MemoryStream ms = new MemoryStream();
        pbProfilePic.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        byte[] Pic_arr = new byte[ms.Length];
        ms.Position = 0;
        ms.Read(Pic_arr, 0, Pic_arr.Length);
        return Pic_arr;
    }

现在,借助以下代码,我将从数据库中检索此图像。

        OleDbCommand cmd = new OleDbCommand("select * from Employees where EmpId=" + datarecordId + "", conn);
        OleDbDataReader reader = cmd.ExecuteReader();
        pbProfilePic.Image = byteArrayToImage((byte[])reader["Photo"]);


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

但是,我在Image returnImage = Image.FromStream(ms);处收到以下错误Image returnImage = Image.FromStream(ms);

附加信息:参数无效。

任何人都可以帮助我解决这个错误。

谢谢。

我正在使用以下代码将图像以二进制格式存储到MS Access数据库

    private byte[] imageToByteArray()
    {
        //Store the profile image to the database in binary format
        MemoryStream ms = new MemoryStream();
        pbProfilePic.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        byte[] Pic_arr = new byte[ms.Length];
        ms.Position = 0;
        ms.Read(Pic_arr, 0, Pic_arr.Length);
        return Pic_arr;
    }

您可以尝试以下方法:

    public Image byteArrayToImage(byte[] byteArrayIn)
    {
        Image retval = null;
        using (MemoryStream stream = new MemoryStream(byteArrayIn))
        {
            retval = (Image)new Bitmap(stream);
        }
        return retval;
    }

而且,正如methodMan所说,调试器告诉您什么? byteArrayIn的值是什么? MemoryStream是否已正确初始化?

如果我只是从随机字符串中创建一个byte []并使用byteArrayToImage,则会遇到相同的错误。 问题是您的原始图像数据不正确。

我尝试在PictureBox上使用您的方法(imageToByteArray和byteArrayToImage)嵌入了jpg作为图像,并且它运行时没有错误,都转换为byte [],然后转换为Image。 听起来好像有些东西损坏了图片框中的原始数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM