You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行ExecuteScalar遇DBNull转其他类型错误,已试dr.hasrow()仍报错

解决"Object cannot be cast from DBNull to other types."错误

首先咱们得揪出问题根源:你用ExecuteScalar()获取MAX(num)的结果,但当查询没有匹配数据时,这个方法会返回DBNull,直接用Convert.ToInt32()强制转换就触发了这个错误。另外你提到用dr.hasrow()验证没用——这是因为这段代码里你根本没用到DataReader对象,全程用的是ExecuteScalar(),这个验证方法自然完全不生效。

修复方案

你需要先捕获ExecuteScalar()的原始返回值,先判断它是否为DBNull,再进行转换操作。修改后的VB代码如下:

drqry = "SELECT max(num) FROM tbCVinfo WHERE cvno LIKE '%" & cvstr & "%'"
cmd2.CommandText = drqry
cmd2.Connection = con

' 先获取原始结果,判断是否为DBNull
Dim maxResult As Object = cmd2.ExecuteScalar()
Dim cv As Integer

If maxResult Is DBNull.Value Then
    ' 没有匹配数据时的处理,比如默认设为0
    cv = 0
Else
    ' 有数据时转换为Int32
    cv = Convert.ToInt32(maxResult)
End If

cv = cv + 1
If cv >= 0 And cv <= 9 Then
    ' 这里放你的原有逻辑代码
Else
    cn = "0001"
End If

cn = result ' 注意:你之前定义的result是空字符串,这里可能需要调整逻辑
cvno = cn

额外安全提示

你的代码存在SQL注入风险!直接把cvstr拼进SQL语句里是非常危险的操作,建议改用参数化查询来规避风险,示例如下:

drqry = "SELECT max(num) FROM tbCVinfo WHERE cvno LIKE @cvstr"
cmd2.CommandText = drqry
cmd2.Connection = con
' 添加参数,通配符%要加在参数值里,而不是SQL语句中
cmd2.Parameters.AddWithValue("@cvstr", "%" & cvstr & "%")

内容的提问来源于stack exchange,提问作者DIANA ROSE ARNAIZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:09:28