2011-01-31 3 views
11

Я сталкиваюсь с этой ошибкой, когда пытаюсь сохранить свое изображение в базе данных.Как сохранить изображение в базу данных?

Что я делаю неправильно? enter image description here

Вот дизайн моего стола:

enter image description here

Я использую Microsoft Server 2008.

+2

+1 для хорошо документированных. –

+0

Это причина ошибки? – yonan2236

+0

отличный документ возьмите еще один – Adrian

ответ

15

У вас есть две проблемы:

  1. The (понятно) путаница о типе данных Image в SQL Server. Это фактически просто большой двоичный объект (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)); 
+1

Я попробую ваше решение сэр, на какое-то время ... – yonan2236

+0

хе-хе, я не могу это получить – yonan2236

+1

@ yonan2236: Вы можете уточнить ...? –

0

ошибка не очень понятно, не существует переход от объекта изображения GDI в массив байтов (который является то, что Тип столбца данных SQL Server Изображение действительно есть). Вам необходимо преобразовать объект Image в массив байтов, прежде чем добавлять его в качестве параметра.

Смежные вопросы