将新学生插入数据库时,未输入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总是数据库查询的空值吗?
答案 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);