如何将图像保存到数据库?

时间:2011-01-31 15:20:37

标签: c# winforms

我在尝试将图像保存到数据库时遇到此错误。

我做错了什么? enter image description here

这是我桌子的设计:

enter image description here

我正在使用Microsoft Server 2008。

2 个答案:

答案 0 :(得分:15)

您有两个问题:

  1. 关于SQL Server中Image数据类型的(可理解的)混淆。这实际上只是一个大型二进制对象(通用术语中的BLOB)。为了在此列中保存图像(或其他任何内容),您必须先将其转换为byte[],然后将该字节数组存储在列中。
  2. 您使用的是不推荐使用的Image数据类型。如果您可以控制此设计,请将其更改为使用varbinary(MAX)。虽然Image类型仍在SQL Server 2008 R2中,但在某些时候它将从以后的版本中删除。
  3. 要获得代表图像的byte[],请尝试以下方法:

    byte[] data;
    
    using(System.IO.MemoryStream stream = new System.IO.MemoryStream())
    {
        image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
        data = stream.ToArray();
    }
    

    data变量现在包含图像的二进制数据,您可以将其用作参数值。您可以在此处执行其他步骤(例如,将其保存为其他格式,例如JPEG),但这至少可以帮助您入门。

    检索数据时,它也会以byte[]的形式返回,因此您需要再次将其转换为图像。

    byte[] data = ...;
    
    Image image = Image.FromStream(new System.IO.MemoryStream(data));
    

答案 1 :(得分:0)

错误很明显,没有从GDI Image对象转换为字节数组(这是SQL Server数据列类型Image真正的用途)。在将Image对象添加为参数之前,需要将其转换为字节数组。