2014-01-10 24 views
1

我有一個XElement對象,我需要使用C#將它插入到Sql Server表中。 (該XML文件包含超過2十萬記錄)使用C#插入Bulk Xml(XElement)數據到Sql server表的最佳方式是什麼?

你能幫我嗎?或者其他任何備用?

+0

你應該如果數據在XML文件是巨大的,而不是一次在內存中加載它使用的XmlWriter。 –

+0

你可以看到這個[link](http://stackoverflow.com/questions/20474672/put-xelement-into-database),可能會很有幫助。 – Amir

回答

2
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. 
1

我會建議,首先從XML加載數據,然後加載DataSet,然後進行SQL批量複製。事情會很容易,然後繼續。

加載XML數據到DataSet可以按以下步驟進行:

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

非常感謝!它的工作正常 – MSanika

相關問題