executetescalar: объект не может быть приведен из DBNull к другим типам

0

У меня возникла проблема, когда нет данных/значений при извлечении во время запуска программы, я получаю следующую ошибку:

Объект нельзя отнести из DBNull к другим типам.

Я попытался dr.hasrow() его, используя 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
  • 0
    Это проблема отладки. Ошибка совершенно ясна, шаг за шагом, и ваша проблема ExecuteScalar на ExecuteScalar в ExecuteScalar вызов ExecuteScalar поскольку он, вероятно, не возвращает ничего, кроме DBNull . Может быть решен путем изменения вашего запроса ...
  • 0
    Если соответствующих записей нет, агрегатные функции, такие как MAX возвращают NULL , что означает DBNull.Value в ADO.NET. Очевидно, что это не целое число, поэтому его можно преобразовать в Integer . Вам нужно либо изменить запрос, чтобы он всегда возвращал Integer либо изменить код VB, чтобы он мог обрабатывать пустые значения.
Показать ещё 4 комментария
Теги:
executescalar

1 ответ

0
Лучший ответ

Простой способ обойти эту проблему - проверить, является ли возвращаемое значение DBNull:

Dim cv As Integer
Dim queryResult = cmd2.ExecuteScalar()
If IsDBNull(queryResult) Then
    ' No matching records. Do something about it.
Else
    cv = DirectCast(queryResult, Integer)
End If
  • 0
    Благодарю. Это сработало! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню