我正在研究我的第一個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