2016-09-13 1 views
0

У меня есть VB.Net код, значение которого берет из БД и если она равна нулю делать какую-то работуКогда обнуляемым целое есть нулевое значение не выполняет команду

While reader.Read 
      tocken = reader.GetInt16("Tocken_No") 
      If tocken.HasValue = False Then 
       TxtPTocken.Text = 1 
      Else 
       TxtPTocken.Text = tocken + 1 
      End If 
     End While 

Else заявление работает должным образом, но первая часть нет. tocken короче нуля. Что мне не хватает? Пожалуйста, помогите

+0

Вы должны включить Option Strict – Plutonix

ответ

0

Этот код не имеет смысла. Вы звоните GetInt16, а это значит, что вы получите Int16. Ваша переменная tocken может быть типа Nullable(Of Short), но вы назначаете ей значение, поэтому HasValue ВСЕГДА будет True.

Ваша проблема заключается в том, что если поле базы данных NULL, ваш код будет генерировать исключение. Такие методы, как GetIn16, терпят неудачу, если нет ожидаемого значения ожидаемого типа. Это до вас, чтобы проверить NULL и обрабатывать, что соответственно:

tocken = If(reader.IsDBNull(reader.GetOrdinal("Tocken_No")), 
      CType(Nothing, Short?), 
      reader.GetInt16("Tocken_No")) 
+0

Моя проблема была моим читателем выбора запроса не было строки для чтения. Я добавляю команду, чтобы проверить hasrow вне строки, и теперь я счастлив. Спасибо за вашу помощь –

Смежные вопросы