2009-04-14 58 views
0

我目前正在使用Visual Studio 2008 Express處理小型Web應用程序。我試圖使用客戶端庫從服務器檢索XML文檔,然後將文檔保存到數據庫列(使用Linq)。數據庫列的數據類型爲xml。不幸的是,在我的第一次嘗試中,我一直沒有成功。無法在數據類型爲'xml'的表列中存儲XmlDocument

假設我已經到了數據上下文對象的引用,這裏是它是什麼,我試圖做的基本知識:

// 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中?我會使用Outerxml而不是InnerXml。 – 2009-04-15 01:22:47

回答

2

您應該看看使用XDocument而不是XmlDocument,然後嘗試將XDocument直接分配給oLog.InfoXML屬性。

不知道oClient.GetDataAsXML()如何工作,您是否可以輕鬆地從該調用中創建XDocument,但如果您使用XDocument而不是XmlDocument工作,則您的生活會更輕鬆。

+0

非常感謝 - 這最終使我走上了正軌。客戶端返回一個XmlDocument,所以我在返回的XmlDocument的OuterXml字符串上使用了XDocument.Parse()。 – Tom 2009-04-15 01:31:08

1

Here's a great post on that。基本上你有新的XML類型和舊的XML類型在那裏發生衝突。

+0

@JP - 感謝您的鏈接。很高興有此作爲參考,因爲它有助於解釋我遇到的衝突。 – Tom 2009-04-15 01:31:48

0

您也可以從.NET 3.5切換你的項目到3.0,這將默認你回到system.xml。但那會讓你遠離使用LINQ。

+0

不會使用舊版本的.net導致其他問題?這是處理這個問題的常用方法嗎? – 2012-12-03 16:19:37