OracleDecimal ma większą precyzję niż dziesiętna. Z tego powodu musisz najpierw zmniejszyć precyzję. Zapomnij o całym analizowaniu, użyj niejawnej konwersji. Spróbuj czegoś w stylu (nieprzetestowane):
decimal d = (decimal)(OracleDecimal.SetPrecision(oraReader.GetOracleDecimal(0), 28));