我正在开发我的第一个ASP.Net应用程序,并且似乎遇到了很多障碍(主要是在WinForms背景下,最近有一个MVC5项目)。
我使用OracleCommand
成功建立了数据库连接并执行了我的查询,但是当我尝试阅读这些行时,我在Column contains NULL value
的第二行获得odr.GetDecimal(1)
。任何人都知道在读取OracleDataReader时如何处理空值?
以下是我的代码:
List<YearsOfService> yearsOfService = new List<YearsOfService>();
string SQL = "SELECT SCHOOL_YEAR as YEAR, " +
"TOTAL_SERVICE_CREDIT as ServiceCredited, " +
"RETIREMENT_SALARY as Salary, " +
"SOURCE_VALUE as CoveredEmployer " +
"FROM " + Schema + ".RANDOM_ORACLE_TABLE a " +
"WHERE MEMBER_ACCOUNT_ID = :memberAccountId";
DbConnection dbc = new DbConnection();
OracleCommand cmd = dbc.GetCommand(SQL);
cmd.Parameters.Add(new OracleParameter("memberAccountId", memberAccountId));
OracleDataReader odr = cmd.ExecuteReader();
int counter = 0;
if (odr.HasRows)
{
while (odr.Read())
{
YearsOfService yos = new YearsOfService();
yos.Year = odr.GetInt16(0);
yos.ServiceCredited = odr.GetDecimal(1); // Error on Second Pass
yos.Salary = odr.GetDecimal(2);
yos.CoveredEmployer = odr.GetString(3);
yearsOfService.Add(yos);
counter++;
}
}
return yearsOfService;
}
我曾经想过一个简单的NULL检查,如果是这样,那么用0替换(因为期望Decimal
值)可以使用以下内容,但没有运气。同样的错误:yos.ServiceCredited = Convert.IsDBNull(odr.GetDecimal(1)) ? 0 : odr.GetDecimal(1);
。
完整错误是:
类型&#39; System.InvalidCastException&#39;发生在Oracle.DataAccess.dll中但未在用户代码中处理
附加信息:列包含NULL数据
我已确认我返回的2行格式如下:
Year|CreditedService|Salary |CoveredEmployer
2013|0.70128 |34949.66|ER
2014|NULL | 2213.99|NULL
任何人都有关于如何最好地进行的建议?在读取OracleDataReader时,我应该如何处理接收NULL值?
答案 0 :(得分:23)
yos.ServiceCredited = odr.IsDBNull(1) ? 0 : odr.GetDecimal(1);
OracleDataReader
提供了IsDBNull()
方法。
GetDecimal()
上的文档要求我们这样做
在调用此方法之前,调用IsDBNull检查空值。