VB.NET如何将Integer的DBNULL值转换为0 - 错误

4
我有这个方法:

Private Function convertInteger(intInteger As Object) As Integer

    If IsDBNull(intInteger) Then
        convertInteger = 0
    Else
        convertInteger = cInt(intInteger)
    End If

End Function

但是它返回以下错误:
类型“integer”和类型“dbnull”之间未定义运算符“=”
我试图将DBnull值转换为0..
但问题是,我尝试转换的值并不总是DBnull.. 那么我该如何处理?

1
为什么不使用 Nullable(Of Int32)?它有一个 HasValue 属性。 - Tim Schmelter
3
在项目设置中启用“Option Strict”选项,然后修复编译错误。然后回到这里。 - Konrad Rudolph
3个回答

3

试试这个

Private Function convertInteger(intInteger As Object) As Integer

    If intInteger = DBNull.Value Then
        Return 0
    End If

    Return intInteger

End Function

正如 [Tim Schmelter] 所建议的,看一下可空类型


2
请不要建议使用旧的VB语法methodName=returnValue,这只是为了兼容性而存在。VB.NET与C#相同,它有一个返回值:return 0 - Tim Schmelter
1
很抱歉,我没有看到函数名称。 - codingbiz

1
Private Sub readValue()
    Dim cSql As String
    Dim oCnn as OleDbConnection
    Dim oCmd as OleDbCommand
    Dim oDataReader as OleDbDataReader
    Dim valor as Integer

    oCnn.open()

    cSql = "SELECT FIELD_NAME FROM TABLE"
    oCmd = New OleDbCommand(cSql, oCnn)
    oReader = oCmd.executeReader

    if oReader.HasRows then
       oReader.read()
       valor = IIf(IsDBNull(oDataReader("FIELD_NAME")), 0, oDataReader("FIELD_NAME"))
    End If
End Sub

编辑帖子以添加适当的代码格式。还要考虑添加任何对代码的解释。 - Pochmurnik

1

试试这个

Private Function convertInteger(ByVal intInteger As Object) as Integer
   If IsDBNull(intInteger) Then
       Return 0
   Else
       Return CInt(intInteger)
   End if
End Function

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接