无法将对象转换为double

时间:2015-04-07 15:03:45

标签: c#

将新学生插入数据库时​​,未输入GPA,因此当我调用事件处理程序显示GPA时,它会崩溃。

object value;    
sql = string.Format("SELECT ROUND(AVG(CAST(Rating AS Float)), 4) FROM GPA WHERE StudentID={0};;", StudentID);
value = this.datatier.ExecuteScalarQuery(sql);

double avgGPA;
if (value != null)
{
    System.Windows.Forms.MessageBox.Show("null");
    avgGPA = Convert.ToDouble(value);
}
else avgGPA = 0.0;

我尝试了此修复程序,在value!=null之前我确定Convert.ToDouble(),但无论如何我都会崩溃,特别是在这一行:

avgGPA = Convert.ToDouble(value);

有错误:无法将对象从DBNull强制转换为其他类型。

我的问题是如何指定默认值,如0.0,以便在找不到GPA时程序不会崩溃?

编辑:感谢所有人,所有人都对解决方案有所了解!新问题变成了,DBNull总是数据库查询的空值吗?

4 个答案:

答案 0 :(得分:3)

只需检查它是否DBNull

avgGPA = value == DBNull.Value ? 0D : Convert.ToDouble(value);

答案 1 :(得分:1)

在查询中检查null是否使用isnull()返回默认值:

SELECT ROUND(AVG(CAST(isnull(Rating,0) AS Float)), 4)

答案 2 :(得分:1)

根据你的情况,你可以在任何一方做到这一点:

-- In the query, return zero if null
select isnull(ROUND(AVG(CAST(Rating AS Float)), 4), 0.0) from...

或者

// In the code, check for DBNull
if (value != DBNull.Value)
{
    avgGPA = Convert.ToDouble(value);
}

答案 3 :(得分:1)

您可以尝试:

double avgGPA = Convert.IsDBNull(value) ? 0.0 : Convert.ToDouble(value);