2009-04-14 3 views
0

Ich arbeite gerade an einer kleinen Webanwendung mit Visual Studio 2008 Express. Ich versuche, ein XML-Dokument von einem Server mithilfe einer Clientbibliothek abzurufen und das Dokument dann in einer Datenbankspalte (mit Linq) zu speichern. Die Datenbankspalte hat den Datentyp xml. Leider war ich bei meinen ersten Versuchen nicht erfolgreich.Kann XmlDocument nicht in einer Tabellenspalte mit dem Datentyp 'xml' speichern

Unter der Annahme, dass ich schon einen Verweis auf das Datenkontextobjekt erhalten, hier ist es, die Grundlagen dessen, was es ist, dass ich zu tun habe versucht:

// using a client library, requestthe XML document from the server 
XmlDocument oXmlDoc = oClient.GetDataAsXML(); 

InformationLog oLog = new InformationLog(); 
oLog.InfoXML = oXmlDoc.InnerXml; // this is where the problem occurs 

dbContext.InformationLogs.InsertOnSubmit(oLog); 
dbContext.SubmitChanges(); 

Insbesondere ist der Fehler, den ich bekommen ist:

Ich bin neu in ASP.NET MVC und Linq, so weiß ich, dass ich etwas vermisse. Zusätzlich zu der Antwort bin ich auch neugierig auf warum ist es unmöglich, einfach speichern die XML wie es ist ohne zusätzliche Verarbeitung.

+0

Was ist das Problem, das Sie sehen? Haben Sie versucht, InnerXml zu betrachten, um sicherzustellen, dass es ein gültiges Dokument ist und dass dieser Text in SQL gespeichert werden kann? Ich hätte Outerxml anstelle von InnerXml verwendet. –

Antwort

2

Sie sollten XDocument anstelle von XmlDocument verwenden und dann versuchen, das XDocument direkt Ihrer oLog.InfoXML-Eigenschaft zuzuweisen.

Ohne zu wissen, wie oClient.GetDataAsXML() funktioniert, ist es nicht klar, ob Sie einfach ein XDocument aus diesem Aufruf erstellen können, aber Ihr Leben wird einfacher, wenn Sie in XDocument statt XmlDocument arbeiten.

+0

Vielen Dank - das hat mich auf den richtigen Weg gebracht. Der Client gibt ein XmlDocument zurück, also habe ich XDocument.Parse() in der OuterXml-Zeichenfolge des zurückgegebenen XmlDocument verwendet. – Tom

1

Here's a great post on that. Im Grunde haben Sie die neuen XML-Typen und alte XML-Typen dort kollidiert.

+0

@JP - Danke für den Link. Freut mich, dies als eine Referenz zu haben, da es hilft, das Zusammentreffen zu erklären, das ich erlebte. – Tom

0

Sie können auch Ihr Projekt von .net 3.5 zu 3.0 wechseln, die Sie standardmäßig zurück auf system.xml. Aber das würde dich davon abbringen, LINQ zu verwenden.

+0

Würde eine ältere Version von .net keine anderen Probleme verursachen? Ist das ein gemeinsamer Ansatz, um mit diesem Problem umzugehen? –