【发布时间】:2019-09-08 19:35:23
【问题描述】:
我在运行程序期间没有获取数据/值时遇到问题,我收到以下错误:
对象不能从 DBNull 转换为其他类型。
我尝试使用 if dr.hasrow() 对其进行验证,但仍然出现错误。
drqry = "SELECT max(num) FROM tbCVinfo WHERE cvno LIKE '%" & cvstr & "%'"
cmd2.CommandText = drqry
cmd2.Connection = con
Dim result As String = ""
cv = Convert.ToInt32(cmd2.ExecuteScalar())
'''''''''in this section I'm getting the error.
cv = cv + 1
If cv >= 0 And cv <= 9 Then
...............
Else
cn = "0001"
End If
cn = result
cvno = cn
【问题讨论】:
-
这是一个调试问题。错误很清楚,单步执行,它中断的行是您的问题,特别是
ExecuteScalar调用,因为它可能不返回除DBNull之外的任何内容。可以通过更改您的查询来解决... -
如果没有匹配的记录,则聚合函数如
MAX返回NULL,这意味着 ADO.NET 中的DBNull.Value。显然这不是整数,因此可以将其转换为Integer。您需要修改查询以使其始终返回Integer,或者修改您的 VB 代码以使其能够处理空值。 -
顺便说一下,如果值已经是
Integer但只是装箱,即通过Object引用提供,那么CInt将比Convert.ToInt32更合适,因为没有实际的转换完成;只是投射。 -
如果 dr.HasRows = True Then If dr.IsDBNull(0) = False Then dr.Close() cv = Convert.ToInt32(cmd2.ExecuteScalar())
-
我已经修改过了。但在代码的 else 部分它不会返回值
标签: mysql vb.net executescalar