我在实体类中有以下代码。它在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”类型的转换无效。
答案 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