Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将对象转换为双精度_C# - Fatal编程技术网

C# 无法将对象转换为双精度

C# 无法将对象转换为双精度,c#,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

在将新学员插入数据库时,他们的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;
我尝试了这个修复,确保
值=在I
Convert.ToDouble()
之前为null,但无论如何我都会崩溃,尤其是在这一行:

avgGPA = Convert.ToDouble(value);
错误:无法将对象从DBNull强制转换为其他类型

我的问题是如何分配一个默认值,如0.0,以便在找不到GPA时程序不会崩溃

编辑:感谢所有人,每个人都在解决方案上取得了成功!新的问题是,DBNull是否总是数据库查询的null?

只需检查它是否为空


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


考虑到您的情况,您可以在任何一方执行此操作,以最有意义的为准:

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

您可以尝试:

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

更改为if(value!=DbNull.value)同样,如果找不到gpa,我不会将其设置为0。使其可为null或其他任何人不使用的
值为DBNull
\sadpandacurrent查询将始终返回recordYes,此查询将返回0,因为
为null
是围绕数据的聚合。如果您刚刚执行了
isnull(评级,0)
,并且您的查询没有返回任何记录,那么
value
实际上将是
null
,而不是
DBNull
,因为查询根本不会返回任何记录。如果您在评级上而不是在平均值上执行了
isnull
,并且没有记录,那么您将得到
DBNull
。但是
avg
上的
isnull
意味着,如果
avg
由于任何原因最终为null,您仍然可以在查询中将其转换为零。如果没有行,这不是仍然为null吗?在当前情况下,记录肯定可用
-- 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);
}
double avgGPA = Convert.IsDBNull(value) ? 0.0 : Convert.ToDouble(value);