C#
대용량 데이터 등록(SqlBulkCopy)시 트랙잭션(Transaction) 에러가 발생할때의 대응방법
지오준
2022. 1. 30. 09:54
반응형
1. 원인 : Sql커낵션(Sql Connection) 설정시에 트랜잭션(Transaction)이 설정된 상황에서 SqlBulkCopy설정에 트랜잭션을 설정하지 않을경우에 발생합니다.
2. 해결방법 : SqlBulkCopy설정에 트랜잭션을 추가로 설정해주면 정상적으로 데이터가 등록됩니다.
3.샘플코드
try
{
//시스템에 공통으로 사용되는 Sql커낵션 접속
sqlConnection.Open();
//Sql 트랜잭션생성
var sqlTransaction = sqlCon.BeginTransaction();
try
{
//SqlBulkCopy 트랜잭션설정
var sqlBulkCopy = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.Default, sqlTransaction);
//등록될 테이블의 컬럼명을 매핑
foreach (DataColumn column in dt.Columns)
sqlBulkCopy.ColumnMappings.Add(column.ToString(), column.ToString());
//등록될 테이블명 설정
sqlBulkCopy.DestinationTableName = dt.TableName;
//테이블에 데이터 등록
sqlBulkCopy.WriteToServer(dt);
//DB에 등록확정
sqlTran.Commit();
}
catch
{
//에러시에 롤백실행
sqlBulkCopy.Rollback();
throw;
}
}
catch
{
//에러시에 Sql커낵션 닫기
sqlBulkCopy.Close();
}
반응형