指定的强制转换对SQLDataReader上的GetFloat无效

iKo*_*ode 2 c# asp.net sqldatareader

我有一个名为EarlyHoursStartTime的数据库列,它被声明为float.

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

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

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


}
Run Code Online (Sandbox Code Playgroud)

我在上面的AddwithValues行上收到错误.

"指定演员阵容无效."

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

我尝试了各种各样的事情来解决这个问题,比如在以下情况下输入默认值:

if (Convert.ToString(myReader.GetValue(44)) == "0.0")
Run Code Online (Sandbox Code Playgroud)

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

当值为0.0时,为什么会出现无效的强制转换异常?由datareader读入的数据库字段是Float,那么问题是什么?

V4V*_*tta 9

根据映射列表

SQL Server data type CLR data type (SQL Server) CLR data type (.NET Framework)
float                SqlDouble                  Double
Run Code Online (Sandbox Code Playgroud)

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