데이터베이스 연동관련 프로그래밍을 할 때 DBNull 관련 예외를 처리하는것이 가장 중요하다고 생각합니다. 여기에서는 3가지 방법으로 DBNull 예외를 제어하는 방법을 살펴보도록 하겠습니다.
가장 일반적인 방법입니다. 닷넷에서 DBNull은 정확히 System.DBNull.Value 값입니다. 읽으려하는 데이터를 System.DBNull.Value 와 비교하여 아래와 같이 처리 할 수 있습니다.
if item("고객이름") is System.DBNull.Value then ' DBNull 일 경우 처리 else ' DBNull 이 아닐경우 처리 end if
위와같이 처리하는 방법이 가장 일반적인 방법이지만, 코드 작성에 상당한 시간을 소요해야 할 것입니다.
이 함수를 이용하면 간단하게 System.DBNull.Value 예외를 피할 수 있습니다. 아래와 같이 각 데이터에 .ToString() 함수만 적어주면 System.DBNull.Value 항목은 "" 즉, String.Empty 값으로 반환됩니다.
item("고객이름").ToString()
이 방법으로 가장 간단하게 DBNull 예외를 피할 수 있지만, 데이터를 파싱해야 하는 경우에는 에러가 발생할 여지가 남아있습니다. 예를 들어 Double.Parse() 등의 함수를 이용하여 변환을 시도할 때 DBNull 이여서 인자로 String.Empty 값이 입력된다면 에러가 발생합니다.
DataRow 클래스와 관련된 변수로 데이터를 받아서 처리하는 경우에는 IsNull() 함수를 이용해서 예외를 피할 수 있습니다. 읽으려고 하는 데이터의 컬럼에 대해 IsNull() 함수를 실행하여 DBNull 여부를 먼저 체크하는 방법입니다.
if row.IsNull("고객이름") = true then ' DBNull 일 경우 else ' DBNull 이 아닐경우 end if
1번과 유사한 방법이지만 iif 등의 조건문과 결합한다면 상당히 간결한 코드를 구성할 수 있는 장점이 있습니다.
Dim x as Double x = System.String.Format("{0:F3}", IIF(row.IsNull("고객번호"), 0, row.item("고객번호")))
위와 같이 처리하면 예외를 피할 수 있습니다.