2011-01-31 73 views
11

我试图将我的图像保存到数据库时遇到此错误。如何将图像保存到数据库?

我在做什么错? enter image description here

这里是我的表的设计:

enter image description here

我使用的是Microsoft Server 2008的

+2

+1有据可查。 – 2011-01-31 15:23:27

+0

它是错误的原因? – yonan2236 2011-01-31 15:23:59

回答

15

你有两个问题:

  1. 的(可以理解的)混乱关于SQL Server中的Image数据类型。这实际上只是一个大的二进制对象(一个常见的BLOB)。为了保存图像(或其他任何东西)在这个列中,您必须先将它转换为byte[],然后将该字节数组存储在列中。
  2. 您正在使用不推荐使用的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)); 
0

该错误是很清楚的,存在来自GDI图像对象为一个字节数组没有转换(这是什么SQL Server数据列类型Image真的是)。在将其添加为参数之前,需要将Image对象转换为字节数组。