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를 리턴한다는 것도 알아두자.
'Skills > C#' 카테고리의 다른 글
C#에서 int로 변환하는 기본 함수 정리 (1) | 2024.01.03 |
---|---|
[Error] 지정한 키가 사전에 없습니다 (0) | 2023.09.19 |
[Error] 개체 참조가 개체의 인스턴스로 설정되지 않았습니다 (0) | 2023.09.19 |
[Error] 멤버는 인스턴스 참조를 사용하여 액세스할 수 없습니다. 대신 형식 이름을 사용하여 한정하세요. (0) | 2023.09.13 |
C#에서 자바스크립트 함수 호출 및 매개변수 문법 (0) | 2023.08.31 |