从类型'DBNull'到类型'Integer'的转换在设计器中无效

时间:2015-12-30 22:22:34

标签: .net vb.net exception casting dbnull

我在实体类中有以下代码。它在Entity.Designer.vb中抛出异常,表示Table Patient中的值Amtd为DbNull。

    If _patientDetails.ID > 0 Then
        If _patientDetails.Amount = EntityEnums.Patient.Existing
            Then                          
               _patientDetails.SetAmountNull()
        End If
    Catch ex As Exception
        _patientDetails.SetAmountNull()
    End Try

End If

如下所示进入“返回”行并抛出异常。

Public Property Amount() As Integer
    Get
        Try 
            Return CType(Me(Me.tablePatient.AmountIDColumn),Integer)
        Catch e As Global.System.InvalidCastException
            Throw New Global.System.Data.StrongTypingException("The value for column 'AmountIDColumn' in table 'Patient' is D"& _ 
                    "BNull.", e)
        End Try
    End Get
    Set
        Me(Me.tablePatient.AmountIDColumn) = value
    End Set
End Property

异常详情

Microsoft.VisualBasic.dll中出现'System.InvalidCastException'类型的第一次机会异常

附加信息:从“DBNull”类型到“Integer”类型的转换无效。

2 个答案:

答案 0 :(得分:1)

最终确实:你不能从DBNull转换为整数。您需要检查 DBNull,以及特殊情况下您希望在该场景中发生的任何事情。也许把它当作0或-1,或许做一些不同的事情:只有你知道。

如果这是C#,我会使用:

var val = tablePatient.AmountIDColumn;
if(val is DBNull) {
    // special-case; return 0, perhaps
} else {
    // cast, etc
    return (int)val; // or Convert.ChangeType, if it is something exotic
}

(我的VB-foo很弱,所以我会将翻译留给读者练习)

答案 1 :(得分:0)

试试这个:

    If _patientDetails.ID > 0 Then
        If (Not _patientDetails.IsAmountNull) AndAlso (_patientDetails.Amount = EntityEnums.Patient.Existing) Then
            _patientDetails.SetAmountNull()
        End If
    End If          

    Catch ex As Exception
        _patientDetails.SetAmountNull()
    End Try