Questão sobre Comparação Tipo ASP.NET e DBNull
Pergunta
Eu tenho uma função que puxa artigos registros de um banco de dados MSSQL. Alguns são URLs para PDFs e outros são artigos reais armazenados no SQL. Os artigos que são armazenados não tem um URL (DBNull) no registro, assim que eu quero ser capaz de analisar isso. Eu tentei um teste simples:
If Row.Item("url").GetType Is GetType(DBNull) Then
//' do something here....
End If
No entanto, recebo a exceção "Conversion from type 'DBNull' to type 'String' is not valid.
". A parte engraçada é, quando eu faço uma vigilância sobre o acima condicional, ele retorna True
ou False
.
Alguém sabe por que isso está acontecendo e / ou uma maneira de corrigir isso? Obrigado!
Solução
Por que não usar:
If Row.IsNull("url") Then
//' do something here....
End If
Outras dicas
Eu sempre apenas usar este teste no registro:
If IsDBNull(strSQLTiggRes("url")) Then
'Do something .
Else
'do something else
end if
Eu gosto
if (DBNull.Value.Equals(Row.Item("url")))
Tente
If Row.Item("url") = DBNull.Value
O erro está lhe dizendo que Row.Item("url")
é um System.String
modo que o valor neste momento não vai por DbNull
.
Tente algo parecido com isto:
If Row.Item("url") Is Nothing Then
//' do something here....
End If
Você não pode simplesmente fazer
If Row.Item("url") = DBNull.Value Then
End If
A minha preferência é:
If Not Object.Equals(DBNull.Value, Row.Item("url")) Then
'Hooray!
End If
Em VB, você pode também usar a função IsDBNull
(Microsoft.VisualBasic
negação) diretamente:
If Not IsDBNull(Row.Item("url")) Then
'Hooray!
End It
Use isto.
if row("ColumnName") is DBNull.value Then
'do something
end if
Você vai descobrir que você deve usar neste caso e você nee dto comparar os valores não apenas os tipos. Você também pode querer colocá-lo em uma função reutilizável que você pode usar para nada em vez de DBNull
retornarfunction checkvalue(item as object)
if item is dbnul.value then
return nothing
else
return item
end if
end function