1

나는 SQL 서버에서 테이블을 가지고 : ParentCategoryID 부모 인 카테고리 나타 내기 위해 카테고리 ID의 값을 유지하기위한 것입니다SQL 서버에서 처리 널의 GUID와 강력한 형식의 데이터 세트

Categories 
-------------- 
CategoryID (uniqueidentifier) 
ParentCategoryID (uniqueidentifier) allow nulls 

. 부모가 없으면 (즉 상위 카테고리 인 경우) ParentCategoryID는 null이어야합니다.

강력하게 형식화 된 데이터 집합 (테이블 어댑터)을 사용 중이며 ParentCategoryID 속성의 경우 null이 될 수 없습니다. 입력 된 데이터 집합의 필드 속성을 변경하려고했지만 GUID를 "비어 있음"또는 "아무것도 표시하지 않으려면"유효하지 않습니다. 유일한 옵션은 null에 대한 예외를 throw하는 것입니다. 이로 인해 오류가 발생합니다.

'범주'테이블의 'ParentCategoryID'열의 값이 DBNull입니다.

입력 된 데이터 집합을 사용할 때 null GUID/uniqueidentifier를 처리하는 방법은 무엇입니까?

답변

2

당신은 비주얼 스튜디오 발전기를 사용하고 모든 것이 당신의 테이블에 대해 제대로 감지되는 경우, 널 (NULL) 열이 당신의 강력한 형식의 DataRow에서 다음을 생성합니다

  1. 테이블 열 이름라는 이름의 공유 재산 ("ParentCategoryID")
  2. 널 엔트리 ("부울 IsParentCategoryIDNull()")
  3. public 메소드를 검출하는 공용 방법이 "널 (null)"항목 ("무효 SetParentCategoryIDNull()")

당신의 강력한 형식의 테이블 이름 감안할 "내는"(MyDataTable 생성 및 MyDataRow), 당신의 DataSetMyDataSetType라는, 그리고 인스턴스는 myDataSet 이름 :

MyDataSetType.MyRow row = myDataSet.My.NewMyRow(); 
row.ParentCategoryID = Guid.Empty; //OPTION 1: explicitly set GUID 
row.SetParentCategoryIDNull(); //OPTION 2: explicitly set Null 
myDataSet.My.AddMyRow(row); 

또한 SetParentCategoryID의 구현에 볼 수 있습니다 "nulling"을하는 데 사용되는 것을보십시오. 데이터베이스/데이터 세트에서

  1. 널 항목 (부모 나 카테고리 : 당신이 상태를 나타내는 값의 세 가지 유형이 이제

    if (row.IsParentCategoryIDNull()) 
    { 
        //Do something spectacular 
    } 
    

    :

    또한, "널 GUID를 '감지)

  2. NULL이 아닌 데이터베이스 항목 (상위 범주, 아마도 상위 범주)
  3. 비어있는 데이터베이스 항목 (비어 있습니다. Guid.Empty)

처음에는이 문제가 발생했을 때 Guid.Empty을 사용하여 데이터베이스에 null 항목을 나타내야한다고 생각했지만 guid 유형을 사용자 정의해야했습니다. 래퍼 함수를 ​​사용하여 강력하게 형식화 된 데이터 집합은 구조체 스타일 유형에 따라 임의의 수의 nullable 열을 일관되게 처리 할 수 ​​있습니다.

+0

감사합니다. Guid.Empty 옵션이 나를 위해 일했습니다. SetParentCategoryIDNull() 옵션을 시도했지만 동일한 오류가 발생했습니다. Guid.Empty는 모두 0 인 Guid를 삽입합니다. 나는 그걸로 살 수있다.내 다른 옵션은 uniqueidentifier 필드 대신 varchar 필드를 사용하는 것이 었습니다. – dtc