SqlBulkCopyColumnMappingCollection을 사용하는 방법?

.net c# columnmappings sqlbulkcopy

문제

매개 변수를 통해 특정 데이터를 전달하여 모든 대량 삽입에 사용할 수있는 하나의 SqlBulkCopy 메서드를 만들고 싶습니다.

이제 그들 중 일부에 대한 매핑을 수행해야합니다. SqlBulkCopyColumnMappingCollection을 만드는 방법을 모르겠습니다. 매핑 계획을 전달하고 사용하는 계획 이었기 때문입니다. 그러나 나는 그것을 어떻게 만드는지 모른다. 나는 그것의 새로운 목적을 만들 수 없다.

이것은 내가 지금 가지고있는 것입니다. 패스를 넣으면 매핑을 어떻게 추가 할 수 있습니까?

public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize)
{
    // Get the DataTable 
    DataTable dtInsertRows = dataTable;

    using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
    {
        sbc.DestinationTableName = DestinationTbl;

        // Number of records to be processed in one go
        sbc.BatchSize = batchSize;

        // Finally write to server
        sbc.WriteToServer(dtInsertRows);
    }
}

수락 된 답변

새 인스턴스를 만들 필요가 없습니다. SqlBulkCopy 클래스에는 사용할 수있는 매핑 컬렉션 인 속성이 있습니다.

public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize)
{
    // Get the DataTable 
    DataTable dtInsertRows = dataTable;

    using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
    {
        sbc.DestinationTableName = DestinationTbl;

        // Number of records to be processed in one go
        sbc.BatchSize = batchSize;

        // Add your column mappings here
        sbc.ColumnMappings.Add("field1","field3");
        sbc.ColumnMappings.Add("foo","bar");

        // Finally write to server
        sbc.WriteToServer(dtInsertRows);
    }    
}

편집하다:

주석을 바탕으로, 목표는 일반 함수를 만드는 것입니다 (예 : 함수에서 매핑을 명시 적으로 하드 코딩하지 않아도 됨). ColumnMappingCollection을 인스턴스화 할 수 없으므로 함수에 열 매핑 정의가 들어있는 List<string> 또는 이와 비슷한 메서드를 전달하는 것이 좋습니다. 예 :

var columnMapping = new List<string>();
columnMapping.Add("field1,field3");
columnMapping.Add("foo,bar");

그런 다음 함수를 다음과 같이 다시 정의하십시오.

public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize, List<string> columnMapping)
{
    // Get the DataTable 
    DataTable dtInsertRows = dataTable;

    using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
    {
        sbc.DestinationTableName = DestinationTbl;

        // Number of records to be processed in one go
        sbc.BatchSize = batchSize;

        // Add your column mappings here
        foreach(var mapping in columnMapping)
        {
            var split = mapping.Split(new[] { ',' });
            sbc.ColumnMappings.Add(split.First(), split.Last());
        }

        // Finally write to server
        sbc.WriteToServer(dtInsertRows);
    }
}


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.