【问题标题】:Read XML Schema and Data in .NET在 .NET 中读取 XML 模式和数据
【发布时间】:2013-03-12 20:47:49
【问题描述】:

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

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

获取表名的架构。然后我用

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 指定架构的数据表中。

【问题讨论】:

    标签: .net sql-server xml xsd


    【解决方案1】:
    1. 您需要在第二个(数据)查询和第一个(模式)查询中包含 XMLSchema 子句。如果您不这样做,那么数据输出将缺少命名空间,因此将不符合架构。

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

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

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

    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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多