2012-06-19 2 views
6

C# 관련 질문이 있습니다. System.DBNull을 DataReader와 함께 사용하는 것에 대해 커뮤니티에 물어보기를 원합니다.DBNull을 평가하는 중 : 동등성 검사 또는 'is'연산자 사용?

데이터베이스를 쿼리하고 더 적절한/선호되는 null 값을 확인할 때?

reader["fieldname"] is DBNull 

하거나 값을 확인 :

reader["fieldname"] == DBNull.Value 

모두 작동하는 것처럼 보이는 'is'연산자를 사용

. 나는 단지 다른 의견을 원했다.

+4

[reader.IsDBNull] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull.aspx)을 사용하지 않는 이유는 무엇입니까? –

+0

reader.IsDBNull()에는 정수 매개 변수가 필요합니다. 문자열 매개 변수를 사용하는 것을 선호합니다. – MothraTL

+0

다음과 같이 할 수 있습니다 :'reader.IsDbNull (reader.GetOrdinal ("fieldname"))' –

답변

7

DBNull.ValueDBNull 클래스의 유일한 널 (NULL)이 아닌 값인 경우,이 둘은 실질적으로 동일합니다. 어느 것이 더 가독성이 좋습니까? 개인적으로 나는 처음 버전을 아주 좋아하지만 마일리지는 다를 수 있습니다.

어느 쪽이든 성능면에서 문제가되지는 않습니다.

4

이 방법으로도 확인할 수 있습니다

Convert.IsDBNull(reader["field name"]); 
+1

Convent.IsDBNUll이 백그라운드에서 수행하는 작업입니다. public 정적 부울 IsDBNull (개체 값) { \t 경우 (값 == DBNull.Value) \t \t \t { 참을 리턴; \t} \t IConvertible convertible = value as IConvertible; \t return convertible! = null && convertible.GetTypeCode() == TypeCode.DBNull; } – MothraTL

2

을 나는 마이크로 소프트가 일반적으로 그들은 당신이 대부분의 변환 및 동등성 검사에 변환 사용하고자하는 경향이 있기 때문에 Convert.IsDBNull을 사용하는 것이 좋습니다 생각합니다. http://msdn.microsoft.com/en-us/library/system.dbnull.aspx에서

:

당신은 데이터베이스 필드에서 검색된 값이 DBNull.Value.Equals 방법에 해당 필드의 값을 전달하여 DBNull이 값이 있는지 여부를 확인할 수 있습니다. 그러나 일부 언어 및 데이터베이스 개체는 데이터베이스 필드의 값이 DBNull.Value인지 여부를 쉽게 판별 할 수있는 메서드를 제공합니다. 이러한 Visual Basic IsDBNull 함수, Convert.IsDBNull 메서드, DataTableReader.IsDBNull 메서드 및 IDataRecord.IsDBNull 메서드가 포함됩니다.