2014-03-31 110 views
0

我很難嘗試使用DataSet,特別是在嘗試根據模式文件驗證XML數據時。根據模式讀取XML數據庫

我使用Visual Studio 2008進行編程,XSD使用它創建。

我依靠Altova XMLSpy進行脫機驗證,當Altova在根據模式驗證數據時沒有抱怨時出現問題,但是我的VB.NET代碼引發了異常。

代碼的簡單讀取XSD架構文件,然後將XML數據文件:

Dim tmpDataSet As New DataSet 
(...) 
tmpDataSet.ReadXmlSchema(xsdtreamreader) 
tmpDataSet.ReadXml(xmltreamreader) 

執行最後一行時,會出現以下異常:

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints. 
+0

如果您的問題中的信息允許其他人重現問題,那麼您更有可能對堆棧溢出問題做出很好的迴應。你能用20行模式文檔和10行文檔複製你的問題嗎?看看你是否可以,並在你的問題中包含該材料。如果你不能,那也可能是一個線索。在[SO幫助文件](http://stackoverflow.com/help/how-to-ask)以及Eric Raymond和Rick Moen的文章[如何以智能的方式提問]中提供有效問題的建議很好( http://catb.org/~esr/faqs/smart-questions.html)。 –

回答

0

你是對的,CM Sperberg- McQueen,讓我們來簡單說一下。

我使用最小模式文件進行了測試,其中只包含兩個表格以及它們之間的一對多關係(下面複製的模式文件)。

然後我只在父表中插入2條記錄(下面複製的數據文件)。

正如預期的那樣,XMLSpy根據模式驗證數據沒有問題。

那麼.NET如何處理它呢?

如果先讀取數據然後將模式文件,一切正常:

tmpDataSet.ReadXmlSchema(_dataSchema) 
tmpDataSet.ReadXml(_dataXml) 

但是,如果你在倒車做到這一點:

tmpDataSet.ReadXml(_dataXml) 
tmpDataSet.ReadXmlSchema(_dataSchema) 

以下異常出現了:

Invalid 'Key' node inside constraint named: FK_MonitoringPoint_ChannelProfile. 

所以第一課是你必須首先閱讀架構,因爲我已經讀過某處。

然而,這將不會對一些真實的情況下工作,以更加複雜的架構和更多的數據,正如我在第一篇文章指出,只有以下通用excepcion消息:

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints. 

在這種情況下,我無法知道爲什麼驗證失敗,爲什麼這與XMLSpy說該文件是有效的不同。

+0

我無法粘貼XSD和XML內容,也不知道如何附加文件... – perevera