2015-01-30 1 views
1

문제가 발생하는 경우 기본적으로 매우 큰 데이터 테이블 (50,000 행)이 있습니다.이 함수를 통해 SqlBulkCopy를 사용하여 작성했습니다.SqlBulkCopy는 예외없이 하나의 행이있는 데이터 테이블을 삽입 할 때 시간 초과가 발생합니다.

public static void DoSqlBulkCopy(string connectionString, string destinationTableName, DataTable dataTable, int batchSize = 2000) 
{ 
    using (var bulk = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.CheckConstraints)) 
    { 
     bulk.BatchSize = batchSize; 
     bulk.DestinationTableName = destinationTableName; 

     for (int i = 0; i < dataTable.Columns.Count; i++) 
     { 
      bulk.ColumnMappings.Add(dataTable.Columns[i].ColumnName, dataTable.Columns[i].ColumnName); 
     } 

     bulk.WriteToServer(dataTable); 
    } 
} 

이 코드는 다른 데이터 항목에도 적용되었지만이 데이터 세트에서는 WriteToServer에만 고정되어 있습니다.

나는 약간의 찰과상을 입었고 SQL 프로파일 러를 작동 시켰지만 아무런 활동도 없었다.

제안 사항? 그것은 어느 쪽도 시간 초과하지 않는다, 나는 그것을 밤새도록 놓았다.

+0

어떻게 열 매핑 루프없이 진행됩니까? – artm

+0

일괄 복사시 프로파일 러에서 명령문을 catch 할 수 없습니다. 배치없이 시도 했습니까? 쓰기에 걸려있는 것을 어떻게 알았습니까? try-catch 블록이 있습니까? datatable에서 1 행으로 이것을 재현 할 수 있습니까? –

+0

아 ... 그래서 1 행으로 같은 문제가 발생합니다. 뭔가 시간 초과하지 않는 이상한 일이지만 데이터베이스를 차단해야합니다. try catch는 없으며, 코드 라인 전후에 콘솔에 로깅 만하면됩니다. – NibblyPig

답변

1

수정 됨. 잘못된 테이블 이름 철자가 CuteCat 대신 CuteCats에 삽입되었습니다. 오류 메시지없이 중단되었습니다. 폭발 한 것!

+0

연결 문자열을 가져 와서 비 SQL 대량 복사 작업에서 사용하는 것이 좋습니다. 잘하면 유용한 오류 메시지가 표시됩니다. – NibblyPig

+0

SQLBulkCopy가 무작위로 매달려 있다면 아마도 스레딩 문제 일 것입니다. 연결을 제대로 관리하지 않으면 충돌이 발생할 수 있으므로 Entity Framework를 함께 사용하면이 작업이 많이 발생합니다. 나는 다른 조언이 없기를 두려워합니다. – NibblyPig

관련 문제