Вопрос о сравнении типов ASP.NET и DBNull - PullRequest
1 голос
/ 29 мая 2009

У меня есть функция, которая извлекает записи статей из базы данных MSSQL. Некоторые из них являются URL-адресами PDF-файлов, а другие являются реальными статьями, хранящимися в SQL. Статьи, которые хранятся, не имеют URL (DBNull) в записи, поэтому я хочу иметь возможность разобрать это. Я попробовал простой тест:

If Row.Item("url").GetType Is GetType(DBNull) Then
    //' do something here....
End If

Однако я получаю исключение "Conversion from type 'DBNull' to type 'String' is not valid.". Самое смешное, что когда я делаю часы на приведенном выше условии, они возвращают True или False.

Кто-нибудь знает, почему это происходит и / или как это исправить? Спасибо!

Ответы [ 8 ]

2 голосов
/ 29 мая 2009

Я всегда просто использую этот тест на записи:

If IsDBNull(strSQLTiggRes("url")) Then
     'Do something                   .
Else
     'do something else
end if
1 голос
/ 29 мая 2009

Почему бы просто не использовать:

If Row.IsNull("url") Then
    //' do something here....
End If
1 голос
/ 29 мая 2009

Мне нравится

if (DBNull.Value.Equals(Row.Item("url")))
0 голосов
/ 29 мая 2009

Используйте это.

if row("ColumnName") is DBNull.value Then
     'do something
end if

Вы обнаружите, что вы должны использовать именно в этом случае, и вам нужно сравнить значения, а не только типы. Вы можете также захотеть поместить его в повторно используемую функцию, которую вы можете использовать, чтобы ничего не возвращать вместо dbnull

function checkvalue(item as object)
     if item is dbnul.value then
          return nothing
     else
          return item
     end if
 end function
0 голосов
/ 29 мая 2009

Мои предпочтения:

If Not Object.Equals(DBNull.Value, Row.Item("url")) Then
  'Hooray!
End If

В VB вы также можете напрямую использовать функцию IsDBNull (Microsoft.VisualBasic заявление об отказе):

If Not IsDBNull(Row.Item("url")) Then
  'Hooray!
End It
0 голосов
/ 29 мая 2009

Разве вы не можете просто сделать

If Row.Item("url") = DBNull.Value Then

End If
0 голосов
/ 29 мая 2009

Ошибка говорит вам, что Row.Item("url") является System.String, поэтому значение в этой точке не будет DbNull.

Попробуйте что-то вроде этого:

If Row.Item("url") Is Nothing Then
    //' do something here....
End If
0 голосов
/ 29 мая 2009

Попробуйте

If Row.Item("url") = DBNull.Value
...