1

今天我一直在尝试将图像保存到数据库中,但我真的无法弄清楚。

我制作了下表(Afbeeldingen):

  • id:int
  • afbeelding1:varbinary(max)

用 Linq-to-SQL 类导入它,为它写了一个 WCF 服务:

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

Afbeelding然后在我的 xaml 页面中,我尝试创建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};
}

我希望有人可以帮助我,因为我真的无法弄清楚。

提前谢谢你,托马斯

编辑:解决了这个问题,当我按下按钮时会发生什么,因为我得到一个错误。

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)
4

1 回答 1

2

您需要构造一个Binary对象。

a.afbeelding1 = new Binary( bytes );
于 2011-11-25T19:57:38.263 回答