2009-10-09 10 views
3

내 응용 프로그램에서 DataTable을 수동으로 채우는 방법으로 SqlBulkCopy를 사용하여 DB 테이블에 새 행을 삽입하려고합니다.SqlBulkCopy 복합 기본 키가있는 테이블에

이 테이블은의 3 개의 열로 구성된 복합 기본 키가있는 테이블을 제외하고 모든 테이블에 대해 정상적으로 작동합니다.

Violation of PRIMARY KEY constraint 'PK_MYCOMPOSITEKEY'. Cannot insert duplicate key in object 'dbo.MyTable'. 
The statement has been terminated. 

이도 가능 :이 테이블에 아무것도 SqlBulkCopy의하려고 할 때마다, 나는 다음과 같은 오류가 발생합니다? 나는 다음 내 DataTable을의 기본 키를 설정하는 시도

:

dt.PrimaryKey = new[] {dt.Columns["PKcolumn1"], dt.Columns["PKcolumn2"], dt.Columns["PKcolumn3"]}; 

그러나 다시, 행운.

답변

1

문제는 데이터에 있습니다.

이미

또는

파일이에있는 테이블에 가지고 전자의 PK 컬럼에서 동일한 데이터를 가지고있는 행 중 하나 또는 둘 모두를 입력 파일에서

있다 pk 열의 값이 같은 두 행 이상

+0

그건 내가 생각하기에 너무. 그러나 필자는 ** ** 데이터베이스 테이블에 아직없는 값의 단일 행에 삽입을 제한했습니다. – kamens

+0

데이터베이스는 데이터베이스가 그것이 무엇이라고 생각합니까? – Mark

+0

귀하와 Majkara가 정확합니다. 나는 Linq-to-SQL을 사용하고 있는데, 외래 키 종속성이 내 외부 경로를 SqlBulkCopy보다 먼저 삽입 한 DB.SubmitChanges() 중에 걸려왔다. 비록 명시 적으로 행을 추가하지 않았지만 그들 자신. – kamens

1

스테이징 테이블에 대량 삽입. 중복 레코드를 정리하십시오. 그런 다음 직접 SQL을 사용하여 삽입합니다. 삽입 코드를 작성할 때 prod 테이블에없는 레코드를 스테이징 테이블로 제한하십시오.

1

DB에 들어가기 전에 대량 데이터를 확인해야합니다. 기존 제약 조건과 충돌하거나 DB에 기록하는 것이 아니라 문제가있을 수 있습니다. 그것은 효과가 있으며 일반적으로보고하는 것이 옳습니다.

그럼에도 불구하고, DataSet 또는 DataReaders의 전체 쇼는 매핑, 불필요한 디자인, 많은 불필요한 변환, 할당, 객체 [] 기반 값 등의 복잡한 작업이며 전체가 순서, 유형 및 문자열 종속 엉망이됩니다. (MS 만 디자인하고 디자인 할 수있는 것). 반면에 기본 OLEDB 벌크 인터페이스는 훨씬 깨끗합니다.

관련 문제