Как сохранить изображение в базе данных?

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

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

Вот дизайн моей таблицы:

enter image description here

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

Ответ 1

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

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

Ответ 3

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