指定的转换无效 - SQL 浮点数到 C# 双精度

6
在我的C#代码中,我有一个double类型的变量,我想将它设置为在我的SQL Management 2008 R2数据库中的值,该值是float类型(在C#中对应double类型,对吗?)。当我使用以下语法时:
double x = (double)reader["column1"]; //reader is SqlDataReader object

我遇到了“指定的强制转换无效”错误。

这是怎么回事?


如果它是float,你尝试过强制转换为float吗?!!! - banging
它是一个双精度浮点数——这很不寻常,但在 SQL 中的浮点数对应于 C# 中的双精度浮点数。 - Skitterm
不,他是对的,它是一个双精度浮点数,但仅当它不为 null 时。我个人偏爱的语法是:double x = reader["column1"] as double? ?? 0.0 - TheCycoONE
3个回答

7

您可以直接使用GetDouble方法:

reader.GetDouble(reader.GetOrdinal("column1"))

在调用此方法之前,请确保调用 IsDBNull 来检查空值。 - YetAnotherUser

7
我建议使用SqlDataReader对象提供的辅助类...
double dbl = reader.GetDouble(reader.GetOrdinal("DoubleColumn"));

如果列有可能为空,您应该考虑这一点...

double dbl = (reader["DoubleColumn"] != DBNull.Value ? dr.GetDouble(dr.GetOrdinal("DoubleColumn")) : 0.0);

感谢。这段代码检查了 null 值,如果有,则将其设置为0,这正是我所需要的。 - Skitterm

4

使用 Convert.ToDouble 方法:

double x = Convert.ToDouble(reader["column1"]);

最好的,谢谢。 - Mohamed Hany

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接