我正在研究我的第一个ASP.Net应用程序,并且似乎遇到了很多障碍(背景主要在WinForms中,最近的MVC5项目在我的腰带下)。通过OracleDataReader读取时处理NULL值?
我成功地实现了利用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;
}
我原以为一个简单的检查空,如果是用0代替(因为期待Decimal
值)会与下面的工作,但没有运气。同样的错误:yos.ServiceCredited = Convert.IsDBNull(odr.GetDecimal(1)) ? 0 : odr.GetDecimal(1);
。
全部错误是:
“”类型的异常出现在Oracle.DataAccess.dll但在用户代码中没有处理
附加信息:列包含NULL数据
我已经证实,正在返回我的2行是按以下格式:
Year|CreditedService|Salary |CoveredEmployer
2013|0.70128 |34949.66|ER
2014|NULL | 2213.99|NULL
任何人都有关于如何最好地进行的建议?我应该如何处理通过OracleDataReader读取时接收NULL值?
只是好奇,在这个特别的行'yos.ServiceCredited = odr.GetDecimal(1);'怎么来的,你的名字都没有引用领域,在分配值之前检查它的值..? '查找空合并' – MethodMan 2014-09-24 19:20:05
我还没有使用OracleDataReader,但我想你需要检查'odr.GetValue(1)'是NULL而不是'odr.GetDecimal(1)'。 – juharr 2014-09-24 19:20:21
检查odr.GetValue(0)!= DBNull.Value – 2014-09-24 19:20:39