将所有xml节点保存到db而不循环遍历它

时间:2011-01-11 14:28:34

标签: xml c#-3.0 linq-to-xml

我有这个xml:

<Path>
  <Record>
     <ID>6534808</ID>
     <Distance>1.05553036073736</Distance>
  </Record>
  <Record>
     <ID>6542471</ID>
     <Distance>1.05553036073736</Distance>
  </Record>
  ... and about more 500 nodes
</Path>

我正在使用下面的代码获取所有“记录”节点:

XmlNodeList paths = xDoc.SelectNodes("//Record");

然后,我将每条记录保存到数据库。但是,问题在于我使用foreach循环遍历此节点,并且此节点的计数可能超过500,有时它会达到1000个“记录”节点。这太长了......

有没有办法保存所有这些节点而不通过它循环?

谢谢!

1 个答案:

答案 0 :(得分:0)

也许您可以使用当前的for-each迭代,但我的建议是不要将数据保存到每次迭代的记录中。

首先创建insert语句,然后在一次行程中批量执行所有插入。这样效率更高。

另一方面,也许你正在使用一些OR / M.如果这是您的情况,并且您的选择是NHibernate,则它支持批处理命令。

您甚至还有另一种更清洁,更有效的解决方案:XSLT。

使用非常简单的XSLT将XML转换为SQL,而不是从C#迭代节点。使用该XSLT将XML解析为SQL是最快速和最佳的解决方案,您也可以一次性发送数据。