Tôi đang làm việc trên ứng dụng ASP.Net đầu tiên của mình và dường như đang gặp phải rất nhiều rào cản (chủ yếu là nền tảng trong WinForms với dự án MVC5 gần đây dưới đai của tôi).Xử lý giá trị NULL khi đọc qua OracleDataReader?
Tôi đang thực hiện thành công kết nối DB bằng cách sử dụng OracleCommand
và thực hiện truy vấn của mình, nhưng khi tôi thử đọc qua các hàng, tôi nhận được Column contains NULL value
trên hàng thứ hai cho odr.GetDecimal(1)
. Bất cứ ai cũng biết cách xử lý các giá trị null khi đọc qua một OracleDataReader?
Dưới đây là mã của tôi:
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;
}
Tôi đã nghĩ một kiểm tra đơn giản cho NULL và nếu như vậy thay bằng 0 (vì chờ đợi một giá trị Decimal
) sẽ làm việc với những điều sau đây, nhưng không có may mắn. Lỗi tương tự: yos.ServiceCredited = Convert.IsDBNull(odr.GetDecimal(1)) ? 0 : odr.GetDecimal(1);
.
Full lỗi là:
Một ngoại lệ của loại 'System.InvalidCastException' xảy ra ở Oracle.DataAccess.dll nhưng không được xử lý theo mã người dùng
thông tin bổ sung: Cột chứa dữ liệu NULL
Tôi đã xác nhận rằng 2 hàng của tôi được trả lại có định dạng sau:
Year|CreditedService|Salary |CoveredEmployer
2013|0.70128 |34949.66|ER
2014|NULL | 2213.99|NULL
Bất kỳ ai cũng có lời khuyên về cách tiến hành tốt nhất? Làm thế nào tôi nên xử lý nhận giá trị NULL khi đọc thông qua OracleDataReader của tôi?
chỉ tò mò về dòng này cụ thể 'yos.ServiceCredited = odr.GetDecimal (1); 'làm thế nào mà bạn không tham khảo lĩnh vực này theo tên và kiểm tra giá trị trước khi chỉ gán giá trị ..? 'Tra cứu Null Coalesce' – MethodMan
Tôi đã không sử dụng OracleDataReader, nhưng tôi đoán bạn cần kiểm tra nếu' odr.GetValue (1) 'là NULL thay vì' odr.GetDecimal (1) '. – juharr
kiểm tra odr.GetValue (0)! = DBNull.Value –