다음을 통해 공유


Null 및 DBNull을 처리하는 방법

이 항목에서는 다양한 유형과 관련된 Null 값을 처리할 때 예상되는 동작과 특정 필드 또는 멤버가 있는지 여부 또는 해당 값이 Null인지 여부를 확인하는 데 사용하는 옵션에 대해 설명합니다.

XML

XML에는 다음이 적용됩니다.

  • XML 값은 문서에서 Null로 반환되지 않습니다. XML 값은 빈 문자열 또는 "없습니다" 오류로 반환됩니다. 빈 문자열인 경우 특정 유형에 대한 변환 수행 시 오류가 발생할 수도 있습니다. 예를 들어 정수 유형으로 지정된 필드의 경우 규칙을 작성할 때 오류가 발생합니다.

  • 비즈니스 규칙 작성기에서는 필드를 null로 설정하거나 필드 형식을 개체로 설정할 수 없습니다.

  • 개체 모델을 통해 형식을 Object로 설정할 수 있습니다. 이 경우 반환되는 값은 XPath 식에 따라 XPath가 계산하는 형식(float, boolean 또는 string)입니다.

.NET 클래스

.NET 클래스에는 다음이 적용됩니다.

  • 반환 형식이 개체 형식이 아닌 경우 null과 비교할 수 없습니다.

  • 멤버 구현에 따라 값 유형이 아닌 매개 변수의 경우 매개 변수로 Null을 전달할 수는 있지만 런타임 오류가 발생할 수 있습니다.

  • 개체에서 파생된 형식의 필드를 null로 설정할 수 있습니다.

데이터 연결

데이터 연결에는 다음이 적용됩니다.

  • 테이블에서 열에 대해 null을 허용하고 열 형식이 text, ntextimage가 아닌 경우 데이터베이스 테이블 열을 null과 비교할 수 있습니다.

    참고

    비즈니스 규칙 작성기를 사용하면 조건에서 형식, 텍스트ntext의 열을 사용할 수 있습니다. 하지만 정책을 실행하면 "text, ntext 및 image 데이터 형식은 IS NULL 또는 LIKE 연산자를 함께 사용할 때를 제외하고 비교하거나 정렬할 수 없습니다"라는 오류 메시지가 표시됩니다.

  • 데이터베이스 테이블 열에 Null을 사용할 수 있는 경우에는 테이블 열을 Null로 설정할 수 있습니다.

  • 값 형식을 비교하거나 null로 설정하면 비즈니스 규칙 작성기에서 개체에 바인딩의 멤버 형식을 자동으로 설정합니다. 인수를 다시 설정하거나 바꾸면 원래 형식으로 다시 변경됩니다.

  • 문자열 형식의 경우 null로 설정하면 형식을 개체 로 변경하지만 null과 비교하면 문자열로 남습니다.

  • 열 형식을 개체로 변경하지 않으므로 비즈니스 규칙 작성기에서 DBNull.Value를 비교하거나 DBNull.Value로 설정할 수 없습니다.

  • 엔진에서는 비교를 수행하는 경우 DBNull 값을 Null로 변환하고 데이터베이스 삽입을 수행하는 경우에는 Null을 DBNull 값으로 변환합니다.

  • 테스트에서는 Null 값이 무시됩니다(SQL Server의 처리 방식과 동일함). 예를 들어 "IF db.column > 5 THEN."이라는 규칙이 있는 경우 db.column에 값이 있는 행만 테스트됩니다. null이 있는 행은 건너뜁니다.

TypedDataTable 및 TypedDataRow

TypedDataTable 및 TypedDataRow에는 다음이 적용됩니다.

  • 비즈니스 규칙 작성기에서 DataConnections와 동일한 방식으로 필드 형식을 개체로 변경합니다.

  • Null과 비교하는 작업을 수행하는 경우를 제외하고는 Null 값에 대한 테스트가 실패합니다. 예를 들어 "IF db.column > 5 THEN" 규칙에 오류가 발생합니다. 어설션된 행에 null 값이 있으면 입니다.

    조건이 병렬로 평가되기 때문에 "IF db.column != NULL AND db.column > 5 THEN"과 같은 테스트는 모든 행에서 잠재적으로 평가되기 때문에 실패합니다.

존재 여부 또는 Null 값인지 여부 확인

비즈니스 규칙을 작성할 때는 먼저 필드가 있는지 확인한 후에 해당 값을 비교해야 합니다. 필드가 Null이거나 없을 경우 값을 비교하면 오류가 발생합니다. 다음과 같은 규칙이 있다고 가정합니다.

IF 제품/수량이 존재하며 제품/수량 > 1

Product/Quantity가 없으면 규칙에서 오류가 throw됩니다. 이러한 문제가 발생하지 않도록 하려면 도우미 메서드에 부모 노드를 전달하여 필드가 있으면 요소 값을 반환하고 필드가 없으면 다른 값을 반환하는 등의 방법을 사용합니다. 다음 규칙을 주의해서 보십시오.

규칙 1

IF EXISTS(Product/Quantity) THEN ASSERT(CREATEOBJECT(typeof(Helper), Product/Quantity)

규칙 2

IF Helper.Value == X THEN...

다음과 같은 규칙을 만들어 문제를 해결할 수도 있습니다.

IF Product/Quantity Exist Then CheckQuantityAndDoSomething(Product/Quantity)

앞의 예제에서는 CheckQuantityAndDoSomething 함수가 매개 변수 값을 확인한 후 조건을 만족하면 실행됩니다.

참고

또는 XML 팩트에서 XPath Field 속성을 수정하여 오류를 catch할 수 있지만 권장되는 방법은 아닙니다.