从Oracle获得空结果,即使实际结果是十进制值

从Oracle获得空结果,即使实际结果是十进制值,oracle,visual-studio,Oracle,Visual Studio,我是Visual Studio中的Oracle新手, 我使用Oracle.ManagedDataAccess作为参考, 在Oracle查询中,每当我试图从算术中检索十进制值时,它总是返回null e、 g 从DUAL中选择26/3,您的数据类型似乎与任何if表达式都不匹配。由于没有默认分支,itemData[i]保持为空。我建议采用以下方法来找出差距: for (int i = 0; i < data.FieldCount; i++) { Type type = data.GetVal

我是Visual Studio中的Oracle新手, 我使用Oracle.ManagedDataAccess作为参考, 在Oracle查询中,每当我试图从算术中检索十进制值时,它总是返回null

e、 g
从DUAL中选择26/3,您的数据类型似乎与任何if表达式都不匹配。由于没有默认分支,itemData[i]保持为空。我建议采用以下方法来找出差距:

for (int i = 0; i < data.FieldCount; i++)
{
  Type type = data.GetValue(i).GetType();

  switch(type)
  {
    case typeof(string):
      itemData[i] = data.GetString(i);
      break;
    case typeof(DateTime):
      itemData[i] = data.GetDateTime(i);
      break;
    case typeof(int):
      itemData[i] = data.GetInt32(i);
      break;
    case typeof(decimal):
      itemData[i] = data.GetDecimal(i);
      break;
    case typeof(bool):
      itemData[i] = data.GetBoolean(i);
      break;
    case typeof(TimeSpan):
      itemData[i] = data.GetTimeSpan(i);
      break;
    case typeof(Single):
      itemData[i] = Convert.ToDecimal(data.GetOracleDecimal(i).ToString());
      break;
    default:
      MessageBox.Show("Unknown type " + type.Name);
      break;
  }
}

因此,我得到了编辑oracle查询的建议 来自。 从双模式中选择26/7 到 从双功能菜单中选择26/7

是的,它是有效的


但是,我仍然不知道为什么

感谢您的响应,但是即使在data.GetValuei这一步中也出现了错误,因此代码甚至无法进一步运行。你说从DUAL returns null中选择26/3。我不知道已经是您的data.GetValuei返回null。我认为这个方法在这种情况下总是会返回一个对象DBNull。对不起,那我就不知道了。
for (int i = 0; i < data.FieldCount; i++)
{
  Type type = data.GetValue(i).GetType();

  switch(type)
  {
    case typeof(string):
      itemData[i] = data.GetString(i);
      break;
    case typeof(DateTime):
      itemData[i] = data.GetDateTime(i);
      break;
    case typeof(int):
      itemData[i] = data.GetInt32(i);
      break;
    case typeof(decimal):
      itemData[i] = data.GetDecimal(i);
      break;
    case typeof(bool):
      itemData[i] = data.GetBoolean(i);
      break;
    case typeof(TimeSpan):
      itemData[i] = data.GetTimeSpan(i);
      break;
    case typeof(Single):
      itemData[i] = Convert.ToDecimal(data.GetOracleDecimal(i).ToString());
      break;
    default:
      MessageBox.Show("Unknown type " + type.Name);
      break;
  }
}