Sql求和异常——对象不能从 DBNull 转换为其他类型

做项目遇到一个以前没遇到的问题,就是要计算一个用户消费总额,

关键代码如下:

string sql = "select sum(Tmoney) from [order] where uid=@uid";
SqlParameter[] paras ={
                          new SqlParameter("@uid",uid)
                      };
object result = this.ExecuteScalar(sql, CommandType.Text, paras);
if (result==null)
{
    return 0;
}
else
{
    return Convert.ToDecimal(result);
}

运行结果报错如下:

解析:

但是代码中已经对获取的值进行了判断,result==null的时候就返回0,不在将result转换为int类型,

但是出现的错误信息是"对象不能从 DBNull 转换为其他类型",调试的时候也会发现,并没有经过result==null,

而是直接跳过,那就说明了如果查询的结果为空的话,数据类型不是Object类型的null值,而是DBNull类型了。

查询资料,发现要对result==DBNull.Value进行判断才可以。

正确代码如下:

string sql = "select sum(Tmoney) from [order] where uid=@uid";
SqlParameter[] paras ={
                          new SqlParameter("@uid",uid)
                      };
object result = this.ExecuteScalar(sql, CommandType.Text, paras);
if (result==DBNull.Value)
{
    return 0;
}
else
{
    return Convert.ToDecimal(result);
}
原文地址:https://www.cnblogs.com/xyyt/p/3203430.html