2013-06-05 45 views
0

我搜索了幾個有關SqlBulkCopy和ColumnMappings發佈的問題,並找不到解決方案。我正在使用C#ASP .NET MS VS 2010和SQL Server 2008 R2。SqlBulkCopy列映射500列加上新列

我一直在使用SqlBulkCopy從數據表源中加載數據。我想將ColumnMappings屬性添加到我的SqlBulkCopy對象,但由於我有很多列,我試圖避免列出我需要映射到DB登臺表中的列的代碼中的所有500列。

我需要使用ColumnMappings的原因是我必須刪除和添加列,以便架構是動態的,這不是一個好的設計,但是爲了這個目的,我們的內部客戶端可以,他們瞭解風險。

我也已將所有列名稱捕獲到集合中。我不認爲ColumnMappings方法將集合作爲源和目標。

我想過編寫兩個SqlBulkCopy對象來處理這個問題,但不知道這是否行得通。另一種選擇是使用T-SQL ..

什麼是最好的方式來處理這個問題或你會建議我探索什麼解決方案?

--set the connection string 
// 
string strConn = ConfigurationManager.ConnectionStrings["CPDM"].ToString(); 
// 
SqlConnection scCPDM = new SqlConnection(strConn); 
// 
// 
--create the SqlBulkCopy opbject 
// 
SqlBulkCopy bulkcopy = new SqlBulkCopy(strConn); 
bulkcopy.BulkCopyTimeout = 3000; 
bulkcopy.DestinationTableName = "CPDE_STAGING"; 
// 
--need a to map all column mappings + new columns 
--looking to do something like this --> bulkcopy.ColumnMappings.Add(*,*); 
--then this ----> bulkcopy.ColumnMappings.Add(new_column,new_table_column); 
--for each new column 

bulkcopy.WriteToServer(dtNewRaw); 

回答

2

我最終使用這個,並且工作得很好。

  //sqlbulkcopy does a blind insert into the db table. 
      //we have to add a column mapping property to tell 
      //sqlbulkcopy how to map each column from source to destination correctly 
      foreach (string sColumn in columnNamesNew) 
      { 
       string sNewColumn = sColumn.Replace(' ', '_'); 
       bulkcopy.ColumnMappings.Add(sColumn, sNewColumn); 

      }