做项目遇到一个以前没遇到的问题,就是要计算一个用户消费总额,
关键代码如下:
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 ;
}
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 ;
}
else
{
return Convert.ToDecimal(result);
}