SQL 대량 복사의 예외 및 메모리 문제

sqlbulkcopy sql-server

문제

우리는 SQL 대량 복사를 사용하여 거의 1000 만 개의 행을 SQL Server 테이블에 삽입합니다.

7400000 회 삽입 후이 예외가 발생했습니다.

연결된 서버 '(null)'의 OLE DB 공급자 'STREAM'이 (가) '[! BulkInsert] .Amount'열의 잘못된 데이터를 반환했습니다.

이것이 해결 될 수 있다면 저희에게 알려주십시오.

또한 메모리 누수 문제가 있습니다.

아래는 우리 코드입니다.

try
{
            using (SqlConnection SQlConn = new SqlConnection(Common.SQLConnectionString))
            {                   
                DataTable dt1 = FillEmptyDateFields(dtDestination);

                //SqlTableCreator ObjTbl = new SqlTableCreator(SQlConn);

                //ObjTbl.DestinationTableName = DestinationTable;

                using (System.Data.SqlClient.SqlBulkCopy bulkCopy = new System.Data.SqlClient.SqlBulkCopy(SQlConn,SqlBulkCopyOptions.TableLock,null))
                {

                    //bulkCopy = new System.Data.SqlClient.SqlBulkCopy(SQlConn);
                    bulkCopy.DestinationTableName = DestinationTable;
                    bulkCopy.BulkCopyTimeout = 0;
                    bulkCopy.BatchSize = dt1.Rows.Count; // Batch Size Added.
                    Logger.Log("DATATABLE FINAL :" + dt1.Rows.Count.ToString(), Logger.LogType.Info);
                    if (SQlConn.State == ConnectionState.Closed || SQlConn.State == ConnectionState.Broken)
                        SQlConn.Open();
                    bulkCopy.WriteToServer(dt1);
                    SQlConn.Close();
                    SQlConn.Dispose();
                    bulkCopy.Close();
                    if (bulkCopy != null)
                    {
                        ((IDisposable)bulkCopy).Dispose();
                    }                        
                }
                dt1.Dispose(); 
                dt1 = null;                           
            }

            dtDestination.Dispose();
            System.GC.Collect();
            dtDestination = null;                

}
catch (Exception ex)
{
    Logger.Log(ex, Logger.LogType.Error);
    throw ex;
}

인기 답변

float 필드에 NaN 값을 삽입하려고했기 때문일 수 있습니다.

최근에이 문제가 있었는데, 무엇이 잘못되었는지를 파악하기 위해 데이터 유형이 NVARCHAR (MAX) 인 테이블에 모든 것을 삽입 한 다음 하나의 값이 NaN 인 것으로 나타났습니다.



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