2009-04-30 2 views
3

VS2005/VS2008 DataSet 디자이너로 만든 강력한 형식의 DataTable이 있습니다.VS2005/VS2008 DataSet 디자이너, 자동 생성 된 guid 열이있는 테이블에 행 삽입

테이블에는 GUID 인 기본 키 열이 있으며 SQL Server에 의해 채워집니다. 문제는 DataTable에 행 (또는 여러 행)을 추가 한 다음 DataAdapter.Update 메서드를 호출 (DataTable 전달)하는 경우입니다. DataAdapter.Update이 호출되면 NULL을 기본 키 열에 삽입 할 수 없다는 SQL 예외가 발생합니다.

디자이너에게 자동 생성 된 열이며 새 행의 값을 제공하지 않으려면 어떻게 말합니까? 난 그냥 SQL에 의해 생성 된 가치 싶습니다.

여기에 뭔가가 누락되었거나 데이터 집합 디자이너의 제한 사항입니까?

저는 LINQ to SQL을 사용하여이 작업을 수행하는 방법을 알고 있지만 불행히도이 프로젝트에서는 사용할 수 없습니다.

답변

2

이들 중 하나가있을 수 있습니다 :

  • 이 앱에 대한 귀하의 데이터 집합의 열을 필요로하지 않는 경우를 , 제거하십시오.
  • 열을 원하지만 값을 부여하지 않으려면 DBNull을 허용하도록 변경하십시오.
  • 제약 조건 적용을 항상 해제 할 수 있습니다 (나쁜 생각 일 수도 있습니다). DataSet.EnforceConstraints = false
  • DB에 전송되지 않는 대리 키를 사용하여 열을 채울 수 있습니다.

첫 번째 두 가지 옵션의 경우 디자이너가 데이터베이스와 동기화하여 편리하게 구조를 유지하려면 열을 제거하거나 프로그래밍 방식으로 null을 허용 할 수 있습니다. 예를 들어 "// HACK : "이유를 설명하는 설명.

0

SQL Server 테이블 정의에서 DEFAULT NEWID()를 사용하는 것은 당연한 일이므로 데이터 세트 디자이너가이 열을 자동 생성 된 것으로 보지 않을 수 있습니다.

어쩌면 응용 프로그램 코드에서 guid를 생성하는 것이 해결책 일 수 있습니까? 그렇지 않다면, 당신은 Dataset의 기본값을 설정할 수 있습니다.하지만이 기본값이 SQL Server 테이블에 삽입되지 않도록 DataAdapter Insert/Update 문을 변경해야 할 것입니다.

또한 내가 잘 모르는 것 같아요 다른 솔루션 ... 아마도

+0

예, 방금 테이블 정의를보고 DEFAULT (newid())로 지정되었습니다. 작동 시키려면 어떻게해야합니까? 나는 테이블의 정의를 바꿀 수는 없지만 그것이 어떻게 설정되어야 하는지를 아는 것은 좋을 것이다. –

+0

다른 방법이 없다고 생각합니다. guid 자동 생성 imho에 대한 정체성과 같은 것이 없습니다. – Rockcoder

관련 문제