我正在开发我的第一个ASP.Net应用程序,在此过程中遇到了很多问题(主要背景是WinForms,最近有一个MVC5项目)。
我成功地使用OracleCommand
建立了数据库连接并执行了查询,但是当我尝试读取行数据时,对于odr.GetDecimal(1)
的第二行出现了Column contains NULL value
。 有人知道如何处理在OracleDataReader中读取null值的情况吗?
以下是我的代码:
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值进行简单的检查,如果是NULL就用0替换(因为期望是Decimal
类型的值),以下代码可以实现,但没有成功。出现了相同的错误:yos.ServiceCredited = Convert.IsDBNull(odr.GetDecimal(1)) ? 0 : odr.GetDecimal(1);
。
完整的错误信息如下:
'System.InvalidCastException'类型的异常在 Oracle.DataAccess.dll 中发生,但是未在用户代码中处理
附加信息: 列包含 NULL 数据
我已确认返回的两行数据格式如下:
Year|CreditedService|Salary |CoveredEmployer
2013|0.70128 |34949.66|ER
2014|NULL | 2213.99|NULL
有人能给出如何最好地继续的建议吗?当我浏览 OracleDataReader 时,如何处理接收到 NULL 值?
odr.GetValue(1)
是否为空,而不是odr.GetDecimal(1)
。 - juharryos.ServiceCredited
需要一个Decimal
值,而不仅仅是从GetValue()
得到的object
。@Syed:我尝试了那个方法,没有成功,还是同样的错误。 - Analytic Lunatic