Pracuję nad moją pierwszą aplikacją ASP.Net i wydaje się, że uderzam w wiele przeszkód (tło głównie w WinForms z niedawnym projektem MVC5 pod moim pasem).Obsługa wartości NULL podczas czytania przez OracleDataReader?
ja skutecznie czyni moje połączenie DB korzystając OracleCommand
i wykonanie moje zapytanie, ale gdy próbuję czytania wierszy Otrzymuję Column contains NULL value
w drugim rzędzie za odr.GetDecimal(1)
. Ktoś wie, jak obsługiwać wartości null podczas czytania przez OracleDataReader?
Poniżej jest mój kod:
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;
}
myślałem prosty czek na NULL, a jeśli tak, wymień 0 (ponieważ spodziewa się wartość Decimal
) będą pracować z następujących, ale bez powodzenia. Ten sam błąd: yos.ServiceCredited = Convert.IsDBNull(odr.GetDecimal(1)) ? 0 : odr.GetDecimal(1);
.
Pełna błędu:
Wyjątek typu „System.InvalidCastException” wystąpił w Oracle.DataAccess.dll ale nie było obsługiwane w kodzie użytkownika
Dodatkowe informacje: kolumna zawiera dane NULL
I potwierdziły, że są zwracane moje 2 wiersze znajdują się w następującym formacie:
Year|CreditedService|Salary |CoveredEmployer
2013|0.70128 |34949.66|ER
2014|NULL | 2213.99|NULL
Ktoś ma porady, jak najlepiej postępować? Jak powinienem obsługiwać otrzymywanie wartości NULL podczas czytania przez mój OracleDataReader?
prostu ciekawy w tej konkretnej linii 'yos.ServiceCredited = odr.GetDecimal (1);' dlaczego nie odwołują pole nazwy i sprawdzanie wartości przed tylko przypisaniem wartości ..? 'Look up Null Coalesce' – MethodMan
Nie użyłem OracleDataReader, ale zgaduję, że musisz sprawdzić, czy' odr.GetValue (1) 'ma wartość NULL zamiast' odr.GetDecimal (1) '. – juharr
sprawdź odr.GetValue (0)! = DBNull.Value –