关于类型比较ASP.NET和DBNull的问题

时间:2009-05-29 17:04:12

标签: asp.net vb.net dbnull

我有一个从MSSQL数据库中提取文章记录的函数。一些是PDF的URL,另一些是存储在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.”例外。有趣的是,当我对上述条件进行监视时,它会返回TrueFalse

任何人都知道为什么会发生这种情况和/或解决此问题的方法?谢谢!

8 个答案:

答案 0 :(得分:2)

我总是在记录中使用此测试:

If IsDBNull(strSQLTiggRes("url")) Then
     'Do something                   .
Else
     'do something else
end if

答案 1 :(得分:1)

我喜欢

if (DBNull.Value.Equals(Row.Item("url")))

答案 2 :(得分:1)

为什么不使用:

If Row.IsNull("url") Then
    //' do something here....
End If

答案 3 :(得分:0)

尝试

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

答案 4 :(得分:0)

错误告诉您Row.Item("url")System.String,因此此时的值不会是DbNull

尝试这样的事情:

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

答案 5 :(得分:0)

你不能这样做吗

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

End If

答案 6 :(得分:0)

我的偏好是:

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

答案 7 :(得分:0)

使用此功能。

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

你会发现在这种情况下你必须使用is,你需要比较值而不仅仅是类型。您可能还想将其放入可重用的函数中,您可以使用它来返回任何内容而不是dbnull

function checkvalue(item as object)
     if item is dbnul.value then
          return nothing
     else
          return item
     end if
 end function