我很难尝试使用DataSet,特别是在尝试根据模式文件验证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 :(得分:0)
你说得对,C.M.Sperberg-McQueen,所以让我们简单一点。
我测试了一个最小的模式文件,其中只包含两个表和它们之间的一对多关系(下面复制的模式文件)。
然后我只在父表中插入2条记录(下面复制的数据文件)。
正如预期的那样,XMLSpy可以毫无问题地根据模式验证数据。
然后.NET如何处理它?</ p>
如果你第一次读取数据然后是模式文件,一切都运行良好:
tmpDataSet.ReadXmlSchema(_dataSchema)
tmpDataSet.ReadXml(_dataXml)
但是,如果你反过来这样做:
tmpDataSet.ReadXml(_dataXml)
tmpDataSet.ReadXmlSchema(_dataSchema)
出现以下异常:
Invalid 'Key' node inside constraint named: FK_MonitoringPoint_ChannelProfile.
所以,第一课是你必须首先阅读模式,因为我已在某处阅读过。
然而,正如我在第一篇文章中所述,只有以下通用的例外信息,这会在某些实际情况下无效,模式更复杂,数据更多:
Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
在这种情况下,我无法知道为什么验证失败以及为什么这与XMLSpy不同,说文件有效。