在.NET中读取XML模式和数据

时间:2013-03-12 20:47:49

标签: .net sql-server xml xsd

我正在使用SQL Server和VB.NET。在我的SQL中,我使用以下内容:

select top 1 * from tablename where 1=0 for xml auto, type, xmlschema

获取tablename的架构。然后我用

select * from tablename where ID=1 for xml, auto, type, elements xsinil, root('xml')

获取我感兴趣的数据行。

如果我在VB中使用以下代码:

Private ds as New Dataset

ds.ReadXMLSchema("xmlschema.txt")

我最终得到的ds包含一个具有正确定义的列集的表

如果我再尝试:

ds.ReadXML("xmldata.txt")

代码成功,但我的数据集表中没有任何行。

我的问题是,为了将SQL Server创建的xml数据读入具有SQL Server指定的模式的数据表,我需要做些什么。

1 个答案:

答案 0 :(得分:0)

  1. 您需要在第二个(数据)查询中包含XMLSchema子句以及第一个(模式)查询。如果不这样做,那么数据输出将缺少名称空间,因此不符合模式。

  2. 您需要通过限定XMLSchema指令(例如XMLSchema('http://tempuri.org'))来为您的架构指定目标命名空间。如果不这样做,那么SQL Server将在每个查询中为您生成一个名称空间,它们可能不匹配。

  3. 您需要确保两个查询的列列表和FOR XML子句完全相同。在您的示例中,您在数据查询中指定了xsinil,但未在架构查询中指定。

  4. 所以在这里你需要为模式查询指定类似的东西

    select top 1 * from tablename 
    where 1=0 
    for xml auto, type, elements xsinil, root('xml'), xmlschema('http://tempuri.org')
    

    这是数据查询

    select * from tablename 
    for xml auto, type, elements xsinil, root('xml'), xmlSchema('http://tempuri.org')