C#

대용량 데이터 등록(SqlBulkCopy)시 트랙잭션(Transaction) 에러가 발생할때의 대응방법

지오준 2022. 1. 30.
반응형

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();
}

 

반응형

댓글