본문 바로가기
Skills/C#

C# DataTable, 필드값 Null과 DBNull 개념 정리

by Hoseok 2023. 8. 30.
728x90
반응형

 

DataTable dt = UserDB.GetUserId();


라는 C# 코드로 데이터베이스에 접근해서 UserId를 받아오려고 한다. 

이때 Null 처리와 관련해서 꼭 구분해야 할 경우가 있다.



1. 데이터베이스에 값이 Null인 경우, DataTable 객체의 Null 여부

DataTable dt = UserDB.GetUserId();


이 경우에 UserId 값이 Null일 경우에 어떤 값을 반환 받을까?

실제 데이터베이스에 값이 Null이더라도 빈 DataTable 객체를 반환받게 된다.

2. 데이터베이스에 값이 존재하지만 행이 존재하지 않을 경우, 빈 테이블 인덱스에 접근할 경우

DataTable dt = UserDB.GetUserId();


dt.Rows[0]["USER_ID"]; 으로 USER_ID 컬럼에 접근하려고 할 때, 

 

데이터에 USER_ID 컬럼 자체가 존재하지 않는다면

[IndexOutOfRangeException: 위치 0에 행이 없습니다.] 

라는 예외가 발생한다.

마찬가지 이유로, 

 

테이블의 상위 객체인 DataSet 객체로 ds.Tables[0]; 으로 빈 DataSet의 인덱스에 접근하려고 해도

 

[IndexOutOfRangeException: 0 테이블을 찾을 수 없습니다.]

라는 예외가 발생한다.

즉, 구체적인 인덱스나 컬럼명에 접근하려고 할 때, 값이 존재하지 않는다면 예외를 발생시킨다.

3. 데이터베이스에 값이 Null인 경우, Null 체크 방법

DataTable dt = UserDB.GetUserId();


dt.Rows[0]["USER_ID"]; 으로 USER_ID 컬럼에 접근하려고 할 때, 

 

USER_ID 컬럼의 값이 Null이라면,

if(dt.Rows[0]["USER_ID"] == DBNull.Value) 

의 조건문을 사용할 수 있다.

그 이유는 ADO.NET에서는 데이터베이스의 필드값이 Null일 때, System.DBNull 객체를 반환하기 때문이다.

또한 DBNull 객체의 ToString() 메서드를 호출하면 String.Empty를 리턴한다는 것도 알아두자.

728x90
반응형