根据模式读取XML数据库

时间:2014-03-31 13:39:45

标签: xml database vb.net xsd relational

我很难尝试使用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.

1 个答案:

答案 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不同,说文件有效。