问题
Today I have been trying to get an image to save into a database, and I really can't figure it out.
I have made the following table (Afbeeldingen
):
id:int
afbeelding1:varbinary(max)
Imported it with a Linq-to-SQL class, wrote a WCF service for it:
[OperationContract]
public void setAfbeelding(Afbeelding a)
{
dc.Afbeeldings.InsertOnSubmit(a);
dc.SubmitChanges();
}
And then in my xaml page I try to to create an Afbeelding
, but I can't put the Byte[]
as a varbinary
. I don't know how to do this and I can't seem to find anything about it.
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};
}
I hope somebody can help me because I really can't figure this out.
Thank you in advance, Thomas
Edit: Having solved this problem, what happens now when I press the button as I get an error.
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:
You need to construct a Binary object.
a.afbeelding1 = new Binary( bytes );
来源:https://stackoverflow.com/questions/8273662/saving-image-to-database-as-varbinary-silverlight