Я сталкиваюсь с этой ошибкой, когда пытаюсь сохранить изображение в базе данных.
Что я делаю неправильно?
Вот дизайн моей таблицы:
Я использую Microsoft Server 2008.
Я сталкиваюсь с этой ошибкой, когда пытаюсь сохранить изображение в базе данных.
Что я делаю неправильно?
Вот дизайн моей таблицы:
Я использую Microsoft Server 2008.
У вас есть две проблемы:
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));
Простой поиск google дает решение для этого: http://www.eggheadcafe.com/community/aspnet/10/10081215/inserting-image-in-sql-server.aspx
Ошибка довольно ясна, нет никакого преобразования из объекта GDI Image в массив байтов (это то, чем действительно является тип столбца данных SQL Server). Вам необходимо преобразовать объект Image в массив байтов, прежде чем добавлять его в качестве параметра.