2011-12-17 2 views
2

Мне нужно сохранить изображение jpg в базе данных в базе данных типа этого свойства nvarchar (max) , поэтому мне нужно сериализовать и десериализовать это свойство как это:Изображение повреждено или усечено в NHibernate при использовании байта [] и varbinary (max)

private byte[] HexStringToObject(string value) 
    { 
     SoapHexBinary shb = SoapHexBinary.Parse(value); 
     return shb.Value; 
    } 

private string ObjectToHexString(object value) 
    { 
     if (value == null) 
      return ""; 

     SoapHexBinary shb = new SoapHexBinary((byte[])value); 
     return shb.ToString(); 
    } 

но есть проблема ,, Я не знаю, что проблема связана с сериализации или десериализации метод только тогда, когда я хочу видеть это изображение с помощью:

public FileResult Initialpicture(int? propertyId) 
    { 
     if (propertyId == null) 
      return null; 
     IProperty image = Repository<IProperty>.Get(propertyId); 
     if (image.Value == null) 
      return null; 
     return File((byte[])image.Value, "image/jpg");//Get of Value use deserialize method to get byte[] 

и в браузер я просто вижу небольшую часть изображения, а ошибка «Изображение повреждено или усечено»: }

В чем проблема?

+2

nvarchar (max) ?? Вы имели в виду varbinary (max)? –

+0

Вы можете использовать FILESTREAM, если используете Sql Server 2008 или выше. –

+1

+1 комментарий Митта Пшеница: не храните двоичные данные в столбце текста (varchar). Пожалуйста, изучите различия между текстовыми данными и необработанными двоичными строками - недостаточно людей их понимают. – Thanatos

ответ

2

Возможно, ваша база данных или ваш ORM, если у вас есть, обрезают массив байтов, например, до 12000 байт.

+0

да это было правильно, и я использовал спящий режим и с помощью этого своего рода отображение каждая вещь работает отлично: Карта (р => p.Value) .Access.CamelCaseField (Prefix.Underscore) .CustomType () . CustomSqlType ("nvarchar (MAX)") . Длина (2147483647) – Adrakadabra