System.InvalidCastException: 'Оператор' + 'не определен для типа' DBNull 'и типа' Integer '.' - PullRequest
0 голосов
/ 27 апреля 2020

Я использую Visual Studio 2019 и создаю. NET Framework 4.7.2 с VB. NET Windows Forms.

Проблема заключается в том, что я следую обучающему видео от моего учителя. Когда программа подключается к базе данных, моя программа работает, но когда я нажимаю кнопку «Сохранить», появляется следующее сообщение:

System.InvalidCastException: «Оператор» + не определен для типа «DBNull» и введите '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

1 Ответ

0 голосов
/ 27 апреля 2020

Существуют предположения относительно выражения rd.Item("total") + 1, предположения о том, что ваши данные нарушают: если rd.Item("total") дает DBNull, вы не можете легально выполнить эту операцию + 1 - следовательно, InvalidCastException.

Попробуйте отделить часть "get the value от rd.Item("total")" от части "add 1 to value of 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 Внедрение, и это ошибка git и проблема с производительностью, а не просто гипотетическая проблема "безопасности".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...