System.InvalidCastException: '操作员'+'没有为类型'DBNull'和类型'Integer'定义。

问题描述 投票:-2回答:1

我使用Visual Studio 2019,用VB.NET Windows Forms生成.NET Framework 4.7.2。

问题是当我按照老师的教程视频进行操作时。当程序连接到数据库时,我的程序正在运行,但当我点击保存按钮时,会出现这样的消息。

System.InvalidCastException: 'Operator '+' is not defined for type 'DBNull' and type 'Integer''.

下面是代码 。

If rd.HasRows Then
    Dim ubah As String

    ubah = "Update from cabang set total ='" & rd.Item("total") + 1 &
        "' where id='" & Mid(ComboBox1.Text, 1, 1) & "'"
    cmd = New OdbcCommand(ubah, conn)
    cmd.ExecuteNonQuery()
End If
database vb.net odbc
1个回答
0
投票

周围有一些假设 rd.Item("total") + 1 表达式,假设你的数据被打破:如果 rd.Item("total") 产量 DBNull你不能合法地执行 + 1 操作--因此 InvalidCastException.

考虑将 "从 "中获取值 "分离出来。rd.Item("total")的 "添加 "部分。1 的值,到 rd.Item("total")"部分,并核实该 + 操作首先是合法的。

Dim totalValue As Object
totalValue = rd.Item("total")
If totalValue <> DBNull.Value Then
    ubah = "Update from cabang set total ='" & totalValue + 1 &
            "' where id='" & Mid(ComboBox1.Text, 1, 1) & "'"
Else
    'total is NULL. what now?
End If

还可以考虑使用实际 Parameter 的对象来使用你的 Command而不是将用户输入的内容串联到你的命令串中--。强制性XKCD注意:这使你的代码容易受到SQL注入的影响,这是一个合法的错误和性能问题,而不仅仅是一个假设性的 "安全 "问题。

© www.soinside.com 2019 - 2024. All rights reserved.