【问题标题】:How to effectively insert XML data to multiple tables along with the relationships in c#.net 4.0?如何有效地将 XML 数据与 c#.net 4.0 中的关系一起插入到多个表中?
【发布时间】:2012-08-04 05:34:24
【问题描述】:

我有一个 XML 文件,其中几乎没有类似类型的节点。这些节点中的每一个都将有子节点。要求是我需要将主节点的数据插入到特定表中,并将其每个子表数据插入到特定子表中,并将外键设置为第一次插入的主键。 XML 类似于以下示例,

       <XML>
          <Provider>
              <providerID>1</ProviderID>
              .
              .
              .
              <ContactInfo>
                 <Address>address1</Address>
                 .
                 .
              </ContactInfo>                  
          </Provider>
           <Provider>
              <providerID>2</ProviderID>
              .
              .
              .
              <ContactInfo>
                 <Address>Address2</Address>
                 .
                 .
              </ContactInfo>                 
          </Provider>   

确切的要求是我需要先将供应商数据插入 Table1,然后我需要将每个供应商内的 ContactInfo 连同 Table1 的 PK 作为 Table2 的 FK 插入到 Table2,............ ...

如何在 c#.net 中有效地实现这一点,避免复杂的循环?任何人请帮我解决这个问题....

【问题讨论】:

  • 似乎xml 应该有 Provider 标签,而不是 Provider1、Provider2、Provider3、......?
  • @RG1-是的,你是对的,我已经相应地更新了代码。现在请看这个..

标签: xml sql-server-2008 c#-4.0


【解决方案1】:
Declare @xml xml
Set @xml = 
'<XML>
<Provider>
    <providerID>1</providerID>
    <ContactInfo>
        <Address>address1</Address>
    </ContactInfo>                  
</Provider>

<Provider>
    <providerID>2</providerID>
    <ContactInfo>
        <Address>address2</Address>
    </ContactInfo>                  
</Provider>

</XML>'

Select 
X.T.value('(providerID)[1]', 'int'),
X.T.value('(ContactInfo/Address)[1]', 'varchar(100)')
From @xml.nodes('/XML/Provider') as X(T)

好的。现在您已经获得了从 xml 中提取数据的查询。首先将所有这些记录插入到临时表中。

完成后,插入第一个表。完毕?现在插入连接记录(连接第一个表和临时表以从第一个表中获取主键值)。

最后,将第二个临时表插入到您的第二个表中。

【讨论】:

  • 如果我需要将主键作为外键引用插入到第二个表中,如何使用上述 sql 语句执行插入到第一个表中?
  • 谢谢它的工作原理。但我的主要问题是将 xml 从 ADO.NET 传递到存储过程。它应该作为字符串传递,参数类型应该作为 SqlDbType.Xml 给出。
  • 代码如下,XmlDocument xmlDocObj = new XmlDocument(); xmlDocObj.Load("test.xml 的路径");字符串 xmlString=xmlDocObj.InnerXml; using(SqlConnection connection=new SqlConnection("connection string")) using(SqlCommand command=new SqlCommand("sp_InsertXml",connection)) {command.CommandType=CommandType.StoredProcedure; command.Parameters.Add("@XmlString", SqlDbType.Xml).Value = xmlString;连接.打开(); command.ExecuteNonQuery();}
猜你喜欢
  • 2014-10-12
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多