Ответ 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));