C# Сравните значение столбца SqlDataReader с 0 - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть этот бит кода:

// Do comparisons for highlighting
if (cellNum == reader.GetOrdinal("MTD Carryover"))
{
   tempCell.Width = 155;

   if (reader.GetInt32(reader.GetOrdinal("MTD Carryover")) < 0)
   {
       tempCell.Attributes.Add("class", tempCell.Attributes["class"] + " " + "RedBackground");
   }
   else
   {
       tempCell.Attributes.Add("class", tempCell.Attributes["class"] + " " + "GreenBackground");
   }

   // Test for yellow last, MTD Carrover - 10% but still less than 0
   if (reader.GetInt32(reader.GetOrdinal("MTD Carryover")) > (reader.GetInt32(reader.GetOrdinal("MTD 
       Carryover")) - (reader.GetInt32(reader.GetOrdinal("MTD Carryover")) * .1))
                                    && (reader.GetInt32(reader.GetOrdinal("MTD Carryover")) > 0))
   {  
       tempCell.Attributes.Add("class", tempCell.Attributes["class"] + " " + "YellowBackground");
   }
}

Я хочу сравнить значение столбца SqlDataReader, чтобы увидеть, если оно меньше 0. Если это так, я хочу сделать фон зеленым Если нет, я хочу сделать его красным. Если оно находится в пределах 10% от 0, но не больше 0, я хочу сделать его желтым.

Я думал, это сработало. Однако, когда я использую флажок, который перезагружает страницу с параметром URL, я получаю следующую ошибку:

Данные равны нулю. Этот метод или свойство нельзя вызывать для значений Null. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Data.SqlTypes.SqlNullValueException: Data is Null. Этот метод или свойство нельзя вызывать для значений Null.

Я подтвердил, что проблема заключается в удалении кода и использовании флажка и перезагрузке страницы, что этот конкретный бит кода и 0 - это моя настоящая проблема. Я использую тот же код в других столбцах для сравнения с другими значениями SqlDataReader, и это работает. Это единственная область, где мне нужно сравнить что-то вне потока SqlDataReader.

Я не уверен, как правильно сравнить значение из потока SqlDataReader с 0. Я пробовал создаю переменную Int32 и устанавливаю ее равной 0 для сравнения, но я получаю тот же результат.

// Used in the SqlDataReader compare below for column highlighting
Int32 compareMTDCarryover = 0;

Я относительно новичок в C# и интенсивно использую StackOverflow на моем первом полноценном веб-сайте. Кажется, я не могу найти ответ на этот вопрос. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 27 февраля 2020

Благодаря большему количеству исследований у меня фактически есть нулевые значения в поле MTD Carryover в SQL, которых я не осознавал.

...