2009-04-14 6 views
0

現在、Visual Studio 2008 Expressを使用している小さなWebアプリケーションで作業しています。私はクライアントライブラリを使用してサーバーからXML文書を取得しようとしているし、Linqを使用してデータベースの列に文書を保存しようとしています。データベース列のデータ型はxmlです。残念ながら、最初の数回の試みでは失敗しました。XmlDocumentをデータ型 'xml'のテーブル列に保存できません

// 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(); 

具体的には、私が手にエラーがある:

それは私がしようとしてるということであるものの基本をここで、私はすでにデータコンテキストオブジェクトへの参照を持っていると仮定すると、次のとおりです。

Cannot implicitly convert type 'System.Xml.XmlNode' to 'System.Xml.Linq.XElement' 

私はASP.NET MVCとLinqを使い慣れているので、私は何か不足していることを知っています。その答えに加えて、についても興味があります。は、そのままXMLをそのまま保存することはできません。

+0

表示される問題は何ですか? InnerXmlを調べて、それが有効な文書であり、このテキストをSQLに格納できることを確認しましたか?私はInnerXmlではなくOuterxmlを使用していました。 –

答えて

2

XmlDocumentではなくXDocumentを使用して、XDocumentをoLog.InfoXMLプロパティに直接割り当ててください。

oClient.GetDataAsXML()の仕組みがわからないと、その呼び出しから簡単にXDocumentを作成できるかどうかはわかりませんが、XmlDocumentの代わりにXDocumentを使用すれば、より簡単に作業できます。

+0

ありがとうございました - これで私は正しい軌道に乗りました。クライアントはXmlDocumentを返すので、返されたXmlDocumentのOuterXml文字列にXDocument.Parse()を使用しました。 – Tom

1

Here's a great post on that。基本的に、新しいXMLタイプと古いXMLタイプがそこに衝突します。

+0

@JP - リンクありがとうございます。私が経験していた衝突を説明するのに役立ちますので、これを参考にしてうれしいです。 – Tom

0

プロジェクトを.net 3.5から3.0に切り替えることもできます。デフォルトではsystem.xmlに戻ります。しかしそれはあなたをLINQの使用から遠ざけるでしょう。

+0

古いバージョンの.netが他の問題の原因になることはありませんか?これはこの問題に対処する共通のアプローチですか? –

関連する問題