我在尝试将图像保存到数据库时遇到此错误。
我做错了什么?
这是我桌子的设计:
我正在使用Microsoft Server 2008。
答案 0 :(得分:15)
您有两个问题:
Image
数据类型的(可理解的)混淆。这实际上只是一个大型二进制对象(通用术语中的BLOB)。为了在此列中保存图像(或其他任何内容),您必须先将其转换为byte[]
,然后将该字节数组存储在列中。Image
数据类型。如果您可以控制此设计,请将其更改为使用varbinary(MAX)
。虽然Image
类型仍在SQL Server 2008 R2中,但在某些时候它将从以后的版本中删除。要获得代表图像的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对象添加为参数之前,需要将其转换为字节数组。