Извините, но этот код не имеет большого смысла.Очевидно, что 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*()
метод вместе.