Сохранение изображения в базу данных как varbinary (silverlight) - PullRequest
1 голос
/ 25 ноября 2011

Сегодня я пытался получить изображение для сохранения в базе данных, и я действительно не могу понять это.

Я сделал следующую таблицу (Afbeeldingen):

  • id:int
  • afbeelding1:varbinary(max)

Импортировал его с классом Linq-to-SQL, написал для него сервис WCF:

    [OperationContract]
    public void setAfbeelding(Afbeelding a)
    {
        dc.Afbeeldings.InsertOnSubmit(a);
        dc.SubmitChanges();
    }

А затем на своей странице xaml я пытаюсь создать Afbeelding, но не могу поставить Byte[] как varbinary. Я не знаю, как это сделать, и я не могу ничего найти об этом.

OpenFileDialog openFileDialog = new OpenFileDialog();

openFileDialog.Filter = "JPEG files|*.jpg";

if (openFileDialog.ShowDialog() == true)
{
   Stream stream = (Stream)openFileDialog.File.OpenRead();
   Byte[] bytes = new Byte[stream.Length];
   stream.Read(bytes, 0, (int)stream.Length);
   string fileName = openFileDialog.File.Name;

   Afbeelding a = new Afbeelding();
   a.id = 1;
   a.afbeelding1 = new Byte{ Bytes = bytes};
}

Я надеюсь, что кто-нибудь может мне помочь, потому что я действительно не могу понять это.

Заранее спасибо, Thomas

Редактировать: Решив эту проблему, что происходит сейчас, когда я нажимаю кнопку, когда я получаю сообщение об ошибке.

System.ServiceModel.FaultException: The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter :a. The InnerException message was 'There was an error deserializing the object of type OndernemersAward.Web.Afbeelding. The maximum array length quota (16384) has been exceeded while reading XML data. This quota may be increased by changing the MaxArrayLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader.'.  Please see InnerException for more details.
   at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
   at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
   at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
   at OndernemersAward.EditAfbeeldingServiceReference.EditAfbeeldingServiceClient.EditAfbeeldingServiceClientChannel.EndsetAfbeelding(IAsyncResult result)
   at OndernemersAward.EditAfbeeldingServiceReference.EditAfbeeldingServiceClient.OndernemersAward.EditAfbeeldingServiceReference.EditAfbeeldingService.EndsetAfbeelding(IAsyncResult result)
   at OndernemersAward.EditAfbeeldingServiceReference.EditAfbeeldingServiceClient.OnEndsetAfbeelding(IAsyncResult result)
   at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)

1 Ответ

2 голосов
/ 25 ноября 2011

Вам необходимо построить объект Binary .

a.afbeelding1 = new Binary( bytes );
...