.NET 3.5에서 사용자 지정 데이터 가져 오기 실행 파일을 가지고 있는데, SqlBulkCopy는 기본적으로 대량의 데이터를 빠르게 삽입합니다. 이 응용 프로그램은 기본적으로 입력 파일을 받아서 데이터를 마사지하고 SQL Server 2000으로 대량 업로드합니다. SQL 2008 데이터베이스 환경으로 구축 한 컨설턴트가 작성했습니다. 그 env 차이가 원인이 될까요? SQL 2000에는 BulkCopy의 기반이되는 bcp 유틸리티가 있습니다. 그래서 이것을 실행했을 때, 교착 상태 오류가 발생했습니다.SqlBulkCopy는 SQL Server 2000에서 교착 상태가 발생합니다.
오류 세부 정보 : 트랜잭션 (프로세스 ID 58)이 다른 프로세스에서 잠금 리소스에 교착 상태가 발생하여 교착 상태로 선택되었습니다. 트랜잭션을 재실행하십시오.
해결하기 위해 여러 가지 방법을 시도했습니다. 일시적으로 연결 문자열 변수 MultipleActiveResultSets = true를 설정하는 것이 이상적이지는 않지만 여전히 교착 상태 오류를 발생시킵니다. 또한 연결 시간 제한 문제가 아닌지 확인했습니다.
여기 기능이 있습니다. 어떤 충고?
/// <summary>
/// Bulks the insert.
/// </summary>
public void BulkInsert(string destinationTableName, DataTable dataTable)
{
SqlBulkCopy bulkCopy;
if (this.Transaction != null)
{
bulkCopy = new SqlBulkCopy
(
this.Connection,
SqlBulkCopyOptions.TableLock,
this.Transaction
);
}
else
{
bulkCopy = new SqlBulkCopy
(
this.Connection.ConnectionString,
SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.UseInternalTransaction
);
}
bulkCopy.ColumnMappings.Add("FeeScheduleID", "FeeScheduleID");
bulkCopy.ColumnMappings.Add("ProcedureID", "ProcedureID");
bulkCopy.ColumnMappings.Add("AltCode", "AltCode");
bulkCopy.ColumnMappings.Add("AltDescription", "AltDescription");
bulkCopy.ColumnMappings.Add("Fee", "Fee");
bulkCopy.ColumnMappings.Add("Discount", "Discount");
bulkCopy.ColumnMappings.Add("Comment", "Comment");
bulkCopy.ColumnMappings.Add("Description", "Description");
bulkCopy.BatchSize = dataTable.Rows.Count;
bulkCopy.DestinationTableName = destinationTableName;
bulkCopy.WriteToServer(dataTable);
bulkCopy = null;
}
교착 상태 정보는 어떻습니까? 캡처 방법은 http://msdn.microsoft.com/en-us/library/ms190465.aspx를 참조하십시오. –