在c#

时间:2016-03-24 19:10:27

标签: c# database image

我有一个ac#应用程序,用于保存和显示记录,当使用图片框保存带有图像的记录时,好像图像保存得很好但在数据库中所有图像似乎都有相同的标记

[BLOB-13B]

使用dbms手动将完全相同的图像手动保存到数据库时,图像标记将为

[BLOB - 2.4KB]

使用此标签我可以使用我的图像显示方法,它会很好

正在转换图像或保存时的某些内容,但我似乎无法理解问题是什么。

这是选择和保存图像的代码

MemoryStream ms = new MemoryStream();
pictureBox.Image.Save(ms, pictureBox.Image.RawFormat);
byte[] img = ms.ToArray();

由于此代码更改图像的方式,在检索图像时,我收到一条错误,上面写着“参数无效” 使用c#和mysqldatabase,虽然数据库类型无关紧要。

任何人都明白出了什么问题?

2 个答案:

答案 0 :(得分:1)

对于任何未来的读者。

经过一些研究后我发现了自己的问题,结果发现当我连接SQL字符串并将字节数组放入其中时,字节数组将被更改为遵循字符串参数。因此,数据库中的blob只会说[Blob 13B],而不是它应该的2.7KB

为避免这种情况,您必须使用“参数化”SQL查询而不是标准连接查询。

请参阅Why my BLOB field is still 13B - what I am doing wrong?

SQL Insert Query Using C#

答案 1 :(得分:0)

听起来您正在将图像的字节数组保存到数据库中,并且需要知道如何将该字节数组转换回图像以便可以显示。你可以用这样的函数来做到这一点:

    public Image ConvertByteArrayToImage(byte[] byteArray)
    {
        MemoryStream ms = new MemoryStream(byteArray, 0, byteArray.Length);
        ms.Write(byteArray, 0, byteArray.Length);
        Image image = Image.FromStream(ms, true);
        return image;
    }

更新:再次阅读之后。我不认为我回答了你问的实际问题。听起来你没有将图像转换为字节数组。我会尝试从你的图片框中取出图像并将其放入Image对象中。然后将该Image对象转换为字节数组。而不是保存picturebox.Image.RawFormat