У меня возникла проблема, когда нет данных/значений при извлечении во время запуска программы, я получаю следующую ошибку:
Объект нельзя отнести из 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
Простой способ обойти эту проблему - проверить, является ли возвращаемое значение 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
ExecuteScalar
наExecuteScalar
вExecuteScalar
вызовExecuteScalar
поскольку он, вероятно, не возвращает ничего, кромеDBNull
. Может быть решен путем изменения вашего запроса ...MAX
возвращаютNULL
, что означаетDBNull.Value
в ADO.NET. Очевидно, что это не целое число, поэтому его можно преобразовать вInteger
. Вам нужно либо изменить запрос, чтобы он всегда возвращалInteger
либо изменить код VB, чтобы он мог обрабатывать пустые значения.