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

关键代码如下:

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);
}

运行结果报错如下:

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

解析:

但是代码中已经对获取的值进行了判断,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);
}

相关文章:

  • 2021-09-25
  • 2021-06-22
  • 2022-12-23
  • 2021-11-18
  • 2022-12-23
  • 2022-01-10
  • 2022-02-19
  • 2022-12-23
猜你喜欢
  • 2021-11-20
  • 2021-08-26
  • 2022-02-03
  • 2022-12-23
  • 2022-12-23
  • 2022-01-21
  • 2022-12-23
相关资源
相似解决方案