2010-12-10 2 views
1

Visual Studio 2008의 .NET 3.5에서 C#으로 프로그램을 작성하고 있습니다. 두 개의 DataTable, A 및 B가있는 DataSet이 있습니다. 테이블 A에 DataColumn Y , 테이블 B는 Z 열이고 두 테이블 모두에 더 많은 열이 있습니다. Y 및 Z 열은 모두 고유 한 AutoIncrementing 열로 설정됩니다.ADO.NET DataSet - 다른 테이블의 열에 대해 고유 한 제약이 있습니다.

저는 Y와 Z도 둘 사이에서 고유해야합니다. 마찬가지로 테이블 A에 이미 Y 열에 3이있는 행이 있고 테이블 B에 새 행을 만들고 해당 새 행의 Z 열에 3을 넣으려고하면 대신 3을 건너 뜁니다. 과에 넣어 4. 나는 그것이 작동해야처럼 보이는 뭔가 시도

: 나는 응용 프로그램을 실행하면 내가 첫 번째 줄에 다음과 같은 오류를 얻을

myDataSet.Tables["A"].Constraints.Add(new UniqueConstraint(new DataColumn[] { myDataSet.Tables["A"].Columns["Y"], myDataSet.Tables["B"].Columns["Z"] })); 
myDataSet.Tables["B"].Constraints.Add(new UniqueConstraint(new DataColumn[] { myDataSet.Tables["A"].Columns["Y"], myDataSet.Tables["B"].Columns["Z"] })); 

을하지만를하고 그 코드에 도달 :
메시지 = "creat에 할 수 없습니다

System.Data.InvalidConstraintException는 처리되지 않은했다 다른 테이블에 속하는 열의 키. "
소스 = "System.Data"

내가 잘 난 정말 모르겠어요 때문에 다른 어디가 활성화 될 수 있도록 넣어되는 두 테이블에 동일한 UniqueConstraint를 추가하는 이유. 그들은 Y와 Z 열 이외에 서로 할 일이 거의 없기 때문에 테이블을 하나로 결합하지 않을 것입니다.

누구든지이 작업을 수행 할 방법을 알고 있습니까? MSDN 설명서에는 여러 테이블이 언급되어 있지 않으므로 아무도 시도하지 않은 것처럼 보입니다.


문제가 끝났습니다. 내 프로그램에서, 나는 어떤 테이블을 다루고 있는지를 추적하기 위해 이미 몇 가지 외래 키 검사를 사용하고 있었다. 지금부터는 다른 방법으로 돌아가는 것이 더 쉬울 수도 있다고 생각했지만 현재의 기술 (내 프로그램의 다른 구성 요소에 더 자세한 신원 정보를 넣는 등 필요한 경우 조금 확장)을 유지하기로 결정했습니다. 잘 작동하는 것으로 판명되었습니다.

나는 결국 내가 게시 한 나의 질문을 해결하지 못한다. Google 직원에게 사과를 보내며 답변을 얻으려고합니다.

답변

2

MSDN documentation는 특히 하나의 DataTable 언급 :

단일 열 하거나 DataTable을 (강조 광산)

의 배열 중 어느 하나에 할당 될 수 UniqueConstraint 개체

DataTable에서이를 적용 할 수 없을 것이라고 생각합니다. 수동으로 동작을 적용해야합니다.

+0

내가 그것을 읽을 때 어떻게 든 놓쳤다. 네, 실제로 수동으로 할 수 있습니다. DataSet이 이런 일을 강요 할 수있는 방법이 없다는 것은 이상한 일입니다. 일반적인 일일 것이라고 생각 했으니까요. 자동 증가 열이있는 유일한 목적으로 새 테이블을 만들고 여기에 새 테이블을 추가 할 테이블을 새로 만들 수 있습니다. – pgn674

+0

@ pgn674 : 어떻게 이것을 실제 데이터베이스에서 할 수 있습니까? 그렇게 흔한 것은 아닙니다. –