【问题标题】:What is the best way to insert Bulk Xml (XElement) data to Sql server Table using C#?使用 C# 将 Bulk Xml (XElement) 数据插入 Sql server 表的最佳方法是什么?
【发布时间】:2014-01-10 12:41:41
【问题描述】:

我有一个 XElement 对象,我需要使用 C# 将它插入到 Sql Server 表中。 (XML 文件包含超过 20 万条记录)

你能帮我吗?或者还有什么替代品?

【问题讨论】:

  • 如果 xml 文件中的数据很大,您应该使用 XmlWriter,而不是一次将其加载到内存中。
  • 你可以看到这个link,可能会有帮助。

标签: c# .net linq linq-to-sql


【解决方案1】:
XElement output = XElement.Load("c:\\temp\\input.xml");
IEnumerable<XElement> users = output.Elements(); 

        DataTable dt = new DataTable();
                dt.Columns.Add("CLIENT_INPUT_MHS_ID", typeof(int));
                dt.Columns.Add("CLIENT_INPUT_MHS_GUID",typeof(Guid));
                dt.Columns.Add("ITEM", typeof(string));
                dt.Columns.Add("ITEM_ID", typeof(int));
                dt.Columns.Add("ITEM_NUMBER", typeof(string));
                dt.Columns.Add("CATEGORY", typeof(string));        

        foreach (XElement str in users)
        {
            DataRow dr = dt.NewRow();
            foreach (XElement node in str.Elements())
            {
                dr[node.Name.LocalName] = node.Value;
            }

            dt.Rows.Add(dr);
        }
SqlBulkCopy bulkCopy = new SqlBulkCopy("ConnectionString...");
 using (bulkCopy )
                {
                    bulkCopy .BulkCopyTimeout = 0;
                    bulkCopy .ColumnMappings.Add(dt.Columns[0].ColumnName, "CLIENT_INPUT_MHS_ID");
                    bulkCopy .ColumnMappings.Add(dt.Columns[1].ColumnName, "CLIENT_INPUT_MHS_GUID");
                    bulkCopy .ColumnMappings.Add(dt.Columns[2].ColumnName, "ITEM");
                    bulkCopy .ColumnMappings.Add(dt.Columns[3].ColumnName, "ITEM_ID");
                    bulkCopy .ColumnMappings.Add(dt.Columns[4].ColumnName, "ITEM_NUMBER");
                    bulkCopy .ColumnMappings.Add(dt.Columns[5].ColumnName, "CATEGORY");
                    bulkCopy.DestinationTableName = "DestinationTableName";                   
                    bulkCopy.WriteToServer(dt); }



Its working fine with my scenario.

【讨论】:

    【解决方案2】:

    我建议,首先从 XML 加载数据,然后是 DataSet,然后再进行 SQL 批量复制。以后事情就简单了。

    将 XML 数据加载到 DataSet 可以如下完成:

    DataSet ds = new DataSet();
    ds.ReadXml("xml file path");
    

    【讨论】:

      猜你喜欢
      • 2019-05-28
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多