2012-01-18 2 views
3

을 있다고 확인 후, "변환 유형에서 'DBNull이'부울 '를 입력하기가 유효하지 않습니다",이 오류 받고 있어요 :에서내 ASP.Net 웹 응용 프로그램에서하지 DBNull이

Conversion from type 'DBNull' to type 'Boolean' is not valid.

을 이 기능 : 당신이 볼 수 있듯이 ItemDBNull 경우

Namespace atc 
    Public Class Nil 
     '... 
     Public Shared Function Bool(ByVal Item As Object) As Boolean 
      Return IIf(Item IsNot Nothing AndAlso Not IsDBNull(Item), CBool(Item), False) 
     End Function 
     '... 
    End Class 
End Namespace 

, 내가 명시 적으로 확인하고있어, 그것은 다음의 경우 나는 False을 반환합니다.

오류가 Item하지DBNull하지가 발생, 그래서 이런 일이 왜 이해가 안 돼요.

답변

10

IIf을 사용할 때 조건이 true 또는 false로 평가 되더라도 모든 인수가 평가됩니다. 항목이 DBNull이널 (null) 또는 입니다 false경우 귀하의 경우에는 함수가 반환하지만 CBool(Item)은 자동으로 어쨌든 백그라운드에서 실행하기 때문에 예외가 발생됩니다.

VB.NET 2008에서 If 키워드는 실제 3 진 연산자를 제공하기 위해 추가되었습니다. 다음으로 IIf 함수 호출을 바꾸기 :

Public Shared Function Bool(ByVal Item As Object) As Boolean 
    Return If(Item IsNot Nothing AndAlso Not IsDBNull(Item), CBool(Item), False) 
End Function 

발췌 MSDN에서 :

An IIf function always evaluates all three of its arguments, whereas an If operator that has three arguments evaluates only two of them.