Oracle 데이터베이스에서 여러 날짜를 읽고이를 DateTimePickers
에 할당하는 응용 프로그램을 사용하고 있습니다. DB를의 값이 null
될 수 있기중복 Null 검사 피하기 (사용자 컨트롤을 매개 변수로 전달)
dtpAdjSerDt.Value = dr.GetDateTime(iadj_service_date);
그러나,이 할당은 NULL 체크가 필요합니다.
값이 null이면 기본값을 반환하는 확장 메서드를 만들 수 있기를 원합니다.
public static DateTime fSafeGetDateTime(OracleDataReader reader, int colIndex)
{
if (!reader.IsDBNull(colIndex))
return reader.GetDateTime(colIndex);
else
return DateTime.Now;
}
이 접근 방식에는 한 가지 문제점이 있습니다. db 값이 null 인 경우 DateTimePicker.Checked는 false 여야합니다. 그러나 위에서 제안한 전략을 사용하면 사실로 설정됩니다. 이 이러한 목표를 달성하기 위해 (중복 코드를 방지) 가장 깨끗한 방법이 될 것입니다 무엇을 할 수없는 경우
public static DateTime fSafeGetDateTime(OracleDataReader reader, int colIndex, DateTimePicker control)
{
if (!reader.IsDBNull(colIndex))
return reader.GetDateTime(colIndex);
else
{
control.Checked = false;
return DateTime.Now;
}
}
:
나에게 이런 일을 할 수있는 방법이 있습니까?
public static DateTime? SafeGetDateTime(this OracleDataReader reader, int colIndex)
{
return reader.IsDBNull(colIndex) ? null
: (DateTime?) reader.GetDateTime(colIndex);
}
는 이제 사용할 수 있습니다 :
- 난 nullable 형식에 익숙하지 않다. 여기서 nullable 형식을 사용하면 fromReader를 초기화 할 때 런타임 오류가 발생하지 않습니까? -I DateTime fromReaderOrNow = fromReader ?? DateTime.Now; - 마지막 제안 (괄호 안)은 불가능합니다 (아키텍처를 담당하는 다른 누군가를 위해 일하고 있기 때문에). 제발 설명해 주실 수 있습니까? (예 : formReader! = null formReader : DateTime.Now) 이 예제에서 어떤 모습일까요? 정말 고마워요! – Zzz
@Azzi : 다른 컨텍스트없이 어떻게 분리 할 것인가에 대한 자세한 내용은 알 수 없습니다. 어쨌든 SO 주석 스레드에는 적합하지 않습니다. 'fromReader'를 초기화 할 때 실행 오류에 대해 무슨 뜻인지 모르겠습니다. 여전히'SafeGetDateTime' 메서드를 사용하고 있습니다. 그게 오류를 방지합니다. 당신은 null 통합 연산자 ('?? ')의 의미에 대해 맞습니다. –
감사합니다. 도움을 많이 받으실 수 있습니다! – Zzz