2

我有一个名为 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,那是什么问题呢?

4

2 回答 2

9

根据映射列表

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

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

于 2012-12-12T15:52:15.647 回答
0

为什么不试试

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

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

问候

于 2012-12-12T13:14:13.447 回答