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 ;
}
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 ;
}
else
{
return Convert.ToDecimal(result);
}
上一篇:数据的存储方式:SQLiteOpenHelper的用法


下一篇:【Python】djangorestframework 基于django框架的接口开发