2013-06-05 4 views
0

SqlBulkCopy 및 ColumnMappings과 관련된 게시 된 질문을 검색하여 해결 방법을 찾을 수 없습니다. SQL Server 2008 R2와 함께 C# ASP .NET MS VS 2010을 사용하고 있습니다.SqlBulkCopy 열 매핑 500 열과 새 열

저는 SqlBulkCopy를 사용하여 DataTable Source의 데이터가있는 준비 테이블을로드했습니다. 내 SqlBulkCopy 개체에 ColumnMappings 속성을 추가하고 싶습니다. 그러나 많은 열을 가지고 있기 때문에 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); 

      } 
관련 문제