【发布时间】:2017-07-18 07:11:06
【问题描述】:
此错误一直显示在这行代码
ApplicantSett.Nationality1 = IIf(IsDBNull(ds.Tables("Applicant").Rows(i)("Nationality1").ToString) Or IsNothing(ds.Tables("Applicant").Rows(i)("Nationality1").ToString),
Nothing, CInt(ds.Tables("Applicant").Rows(i)("Nationality1").ToString))
变量 Nationality1 是一个整数,它在数据库中为空,所以它没有转换。我该怎么办?
【问题讨论】:
-
您正在使用
tostring,本质上是尝试将string与integer匹配。将Nationality1解析为整数而不是tostring -
我遇到了另一个错误:从“DBNull”类型到“String”类型的转换无效。
-
在同时检查
DBNull和Nothing条件时删除ToString:IIf(IsDBNull(ds.Tables("Applicant").Rows(i)("Nationality1")) Or IsNothing(ds.Tables("Applicant").Rows(i)("Nationality1")), Nothing, CInt(ds.Tables("Applicant").Rows(i)("Nationality1").ToString))。 -
IsDbNull对ToString值的测试是错误的:ToString 已将可能的 DbNull 值转换为空字符串,这不再是 DbNull。所以这将始终返回 False。解决方案:删除 .ToString。 -
您不需要测试 IsNothing,DataRow 字段永远不会是 Nothing,而是 DbNull。另外,当它是 Nothing 时,ToString 会崩溃(NullReferenceException)。