【问题标题】:Specified cast is not valid with GetFloat on SQLDataReader指定的强制转换对 SQLDataReader 上的 GetFloat 无效
【发布时间】:2012-12-12 12:26:28
【问题描述】:

我有一个名为 EarlyHoursStartTime 的数据库列,它被声明为浮点数。

然后我有一些代码,我用 DataReader 遍历整个表

SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (myReader.Read())
{

    cmdInsertLocation.Parameters.AddWithValue("@EarlyHoursStartTime", myReader.GetFloat(44)); <- Error here


}

上面的 AddwithValues 行出现错误。

“指定的转换无效。”

当发生这种情况时,myReader.GetValue(44) 显示的值为 0.0。

我尝试了各种方法来解决这个问题,比如在以下情况下使用默认值:

if (Convert.ToString(myReader.GetValue(44)) == "0.0")

但这应该是不必要的,无论如何它都不起作用。

为什么当值为 0.0 时我会收到无效的强制转换异常? datareader读入的数据库字段是Float,有什么问题?

【问题讨论】:

  • 我认为你应该使用GetDouble 等同于SQL float is double
  • @V4Vendetta 似乎已经解决了这个问题。您想将其放入答案中以便我将其标记为正确吗?

标签: c# asp.net sqldatareader


【解决方案1】:

根据Mapping list

SQL Server data type CLR data type (SQL Server) CLR data type (.NET Framework)
float                SqlDouble                  Double

SQL 浮点数映射到 double 数据类型,因此您应该尝试使用 GetDouble 而不是 GetFloat

【讨论】:

    【解决方案2】:

    为什么不试试

    float _float = Convert.ToSingle(myReader[FloatCol].tostring());
    

    我不倾向于使用 Oridnal 位置,因为我发现转换所有内容都会减少问题(大部分时间)

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-27
      • 2014-07-30
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多