我有这段代码:
// 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。如果是,我想把背景做成绿色,如果不是,我想让它变成红色。如果它在0的10%以内,但不超过0,我想使它变成黄色。
我认为这有效。然而,当我使用复选框重新加载带有URL参数的页面时,我会得到以下错误:
数据为Null。不能对Null值调用此方法或属性。描述:在执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误以及错误在代码中的来源的更多信息。
异常详细信息:System.Data.SqlTypes.SqlNullValueException:数据为Null。不能对Null值调用此方法或属性。
我已经通过删除代码、使用复选框并重新加载页面来确认这是问题所在,这段特定的代码和0是我真正的问题。我在其他列中使用相同的代码来与其他SqlDataReader
值进行比较,这很有效。这是我需要与SqlDataReader
流之外的内容进行比较的唯一区域。
我不知道如何正确地将SqlDataReader
流中的值与0进行比较。我尝试创建一个Int32变量并将其设置为0进行比较,但我得到了相同的结果。
// Used in the SqlDataReader compare below for column highlighting
Int32 compareMTDCarryover = 0;
我是C#的新手,在我的第一个完整网站上广泛使用了StackOverflow。不过,我似乎找不到这个问题的答案。感谢您的帮助。
通过更多的检查,我实际上在SQL中的MTD Carryover字段中有空值,但我没有意识到我有空值。