Oracle关系数据库;c#;读取十进制值时发生InvalidCast异常

Oracle关系数据库;c#;读取十进制值时发生InvalidCast异常,c#,oracle,oracle11g,odp.net,oracle12c,C#,Oracle,Oracle11g,Odp.net,Oracle12c,如果我正在读取以下简单查询的结果: DbDataReader _dbReader = query.SendQuery(queryTxt, ref error, fromWhere) //custom method string value; ... try { DateTime dateTimeValue = (DateTime)_dbReader[i]; value = dateTimeValue.ToString("yyyy-MM-dd HH

如果我正在读取以下简单查询的结果:

  DbDataReader _dbReader = query.SendQuery(queryTxt, ref error, fromWhere) //custom method 
  string value;
  ...
  try
  {
       DateTime dateTimeValue = (DateTime)_dbReader[i];
       value = dateTimeValue.ToString("yyyy-MM-dd HH:mm:ss");
  }
  catch(Exception ex)
  {
       **value = _dbReader[i].ToString();**  // culprit statement
  }
}
catch (System.OverflowException ex)
{
   // handled gracefully
}
然后,代码在读取最后一个值2/3时返回InvalidCastException 我不知道的是,它什么时候可以将每隔一个十进制数转换为字符串,为什么不能转换为2/3? 我知道它将具有Oracle RDBMS允许的最大精度,但它仍然是十进制的

再加上问题的复杂性,上面的代码在Oracle 11*客户端工具中运行良好,但问题只存在于Oracle 12c客户端工具中。我试图浏览OracleDataAccess API的文档,但找不到与此问题相关的任何更新

我可以为InvalidCastException添加另一个catch块,并尝试使用GetDecimal或类似的方法来避免错误,但如果该值不是十进制,并且catch块中的代码再次引发异常,该怎么办


有什么想法/想法吗?

你可以对对象引用执行.GetValue,然后检查你感兴趣的类型,例如“if(myObj是十进制的)”,然后将其转换为十进制等。显示“value”变量和_dbReader的声明。@OldProgrammer添加到主帖子中。你可能想签出我试图理解的这篇帖子,为什么它在试图转换为字符串时抛出此异常?我是说_dbReader[i].ToString();或者当我们调用_dbReader[i]时,它在内部试图将值存储在临时变量中,并对其调用ToString,我假设这个临时变量是decimal,可能我不知道。你知道内部到底发生了什么吗?
select 1, 1.4, 2/3 from dual