使用c#从访问数据库中检索图像

时间:2015-05-05 18:08:24

标签: c# ms-access

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

读者的价值[" 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);

收到以下错误

附加信息:参数无效。

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

感谢。

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

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

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

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

另外,正如methodMan所说,调试器告诉你什么? byteArrayIn的值是多少? MemoryStream是否已正确初始化?

答案 1 :(得分:0)

如果我只是从随机字符串创建一个byte []并使用byteArrayToImage,我会得到同样的错误。问题是原始图像数据不好。

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