Domanda sul tipo di confronto ASP.NET e DBNull
Domanda
Ho una funzione che tira articoli record da un database MSSQL. Alcuni sono gli URL ai file PDF, e altri sono articoli effettivi memorizzati nel SQL. Gli articoli che vengono memorizzati non hanno un URL (DBNull) nel record, quindi voglio essere in grado di analizzare questo. Ho provato un semplice test:
If Row.Item("url").GetType Is GetType(DBNull) Then
//' do something here....
End If
Tuttavia, ottengo l'eccezione "Conversion from type 'DBNull' to type 'String' is not valid.
". La parte divertente è, quando faccio un orologio sul quanto sopra condizionale, restituisce True
o False
.
Qualcuno sa perché questo sta accadendo e / o un modo per risolvere questo problema? Grazie!
Soluzione
Perché non usare:
If Row.IsNull("url") Then
//' do something here....
End If
Altri suggerimenti
ho sempre basta usare questo test sul record:
If IsDBNull(strSQLTiggRes("url")) Then
'Do something .
Else
'do something else
end if
Mi piace
if (DBNull.Value.Equals(Row.Item("url")))
Prova
If Row.Item("url") = DBNull.Value
L'errore che si sta dicendo che Row.Item("url")
è un System.String
modo che il valore a questo punto non sarà da DbNull
.
Provare qualcosa di simile a questo:
If Row.Item("url") Is Nothing Then
//' do something here....
End If
Non potete fare solo
If Row.Item("url") = DBNull.Value Then
End If
La mia preferenza è:
If Not Object.Equals(DBNull.Value, Row.Item("url")) Then
'Hooray!
End If
In VB, è anche possibile utilizzare la funzione IsDBNull
(Microsoft.VisualBasic
diniego) direttamente:
If Not IsDBNull(Row.Item("url")) Then
'Hooray!
End It
Utilizzare questa.
if row("ColumnName") is DBNull.value Then
'do something
end if
Troverete che è necessario utilizzare è in questo caso e nee dto confrontare i valori non solo i tipi. Si consiglia inoltre di mettere in una funzione riutilizzabile che è possibile utilizzare per restituire nulla invece che DBNull
function checkvalue(item as object)
if item is dbnul.value then
return nothing
else
return item
end if
end function