【发布时间】:2020-02-26 23:01:03
【问题描述】:
我有这段代码:
// 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 值调用此方法或属性。 说明:执行当前 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。不过,我似乎找不到这个问题的答案。任何帮助表示赞赏。
【问题讨论】:
-
哪一行抛出异常?你在某个地方给
reader.Read()打电话吗? -
是的,我在此代码之前调用 reader.Read()。我从 SqlDataReader 获取数据就好了。引发异常的行是: if (reader.GetInt32(reader.GetOrdinal("MTD Carryover"))
标签: c# sql-server sqldatareader