У меня проблема, когда во время работы программы нет данных/значений, я получаю следующую ошибку:
Объект нельзя преобразовать из 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
. Можно решить, изменив запрос... - person zaggler   schedule 17.05.2018MAX
, возвращаютNULL
, что означаетDBNull.Value
в ADO.NET. Очевидно, что это не целое число, поэтому его можно преобразовать вInteger
. Вам нужно либо изменить свой запрос, чтобы он всегда возвращалInteger
, либо изменить код VB, чтобы он мог обрабатывать нули. - person jmcilhinney   schedule 17.05.2018Integer
, но просто помещено в коробку, т. е. предоставлено через ссылкуObject
, тогдаCInt
будет более подходящим, чемConvert.ToInt32
, так как фактическое преобразование не требуется; просто литье. - person jmcilhinney   schedule 17.05.2018dr.HasRows
, но я не вижу, чтобы вы использовали DataReader в своем коде. Вы используетеExecuteScalar()
. Ну, судя по вашему предыдущему комментарию, вы используете DataReader перед вызовом.ExecuteScalar()
. Если вы делаете это только для проверки наличия строк, вам не нужно этого делать. Проверьте мой ответ ниже. - person 41686d6564   schedule 17.05.2018