SqlDataReader конвертировать Int в Int? - PullRequest
0 голосов
/ 08 февраля 2019

Мне нужно вернуть значение NULL или Blank для Apvl_Lvl_Id, если результат SQL возвращает NULL, поскольку интеграция передает значение Apvl_Lvl_Id, чтобы не обработать значение, если оно не соответствует существующему значению для этого экземпляра.

Я не могу понять, чего мне не хватает, надеясь, что кто-то может предложить несколько указателей.Надеюсь, приведенного ниже кода достаточно для примера.

   while (dr.Read())
      {
        if(dr.IsDBNull(Apvl_Lvl_Id))
         {
           int? Apvl_Lvl_IdNULL;
           Apvl_Lvl_Id = Apvl_Lvl_IdNULL;
         }
         else
         {
            Apvl_Lvl_Id = dr.GetInt32(0);
         }
      }

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Извините, но этот код не имеет большого смысла.Очевидно, что Apvl_Lvl_Id должен быть порядковым номером столбца - фактически, счетчик столбцов в строке, начинающийся с нуля, который вы проверяете как DBNull.Затем вы пытаетесь присвоить фактическому значению столбца этот порядковый номер?Кроме того, вы просто не можете назначить null на int.Введите отдельную переменную, скажем, Apvl_Lvl_Value, сделайте ее Nullable<int> (или int?) и присвойте значение столбца как требуется (фактическое значение или null).

В «коротком»код должен выглядеть примерно так:

  while (dr.Read())
  {
     int? Apvl_Lvl_Value;
     // Check if the value of the column with the ordinal Apvl_Lvl_Id is DBNull
     if(dr.IsDBNull(Apvl_Lvl_Id))
     {
       // If so, use .NET "null" for the rest of the logic.
       Apvl_Lvl_Value = null;
     }
     else
     {
        // Use the actual columns (non-NULL) value.
        Apvl_Lvl_Value = dr.GetInt32(Apvl_Lvl_Id);
     }

     // Do something with the column's value, stored in Apvl_Lvl_Value

  }

Теперь некоторые вещи являются догадками, которые на самом деле не совсем понятны из вашего вопроса, но, как правило, приведенное выше является «шаблоном», по которому можно было бы использовать IsDBNull() и Get*() метод вместе.

0 голосов
/ 08 февраля 2019

А почему бы вам просто не установить

Apvl_lvl_Id = null;
...