C#中MySql SUM查询返回null引发DBNull类型转换错误如何解决
报错原因
当你的SQL查询的WHERE条件没有匹配到任何行时,MySQL的SUM()聚合函数会返回NULL,对应.NET程序中会映射为DBNull.Value,直接将该值强制转换为数值类型就会触发Object cannot be cast from DBNull to other types报错。
解决方法
方法1:SQL层面处理(更推荐)
直接修改SQL语句,用MySQL内置的IFNULL()函数将NULL结果替换为0,无需修改后续C#逻辑:
把原来的查询SQL替换为:
SELECT IFNULL(SUM(standard_one), 0) FROM `challenge` WHERE DAYOFWEEK(date)=1 AND challenge_id = @challenge_id AND username = @username
注:你原来的SQL里
WHERE (SELECT DAYOFWEEK(date)=1)是冗余写法,直接写DAYOFWEEK(date)=1即可,执行效率更高。
方法2:C#代码层面处理
执行查询后先判断返回值是否为DBNull.Value,再做类型转换:
object queryResult = command1.ExecuteScalar(); int sumValue = queryResult == DBNull.Value ? 0 : Convert.ToInt32(queryResult);
- 如果需要取其他数值类型,把
Convert.ToInt32替换为对应的转换方法即可,比如Convert.ToDecimal。
内容的提问来源于stack exchange,提问作者Mohammad Hujerat
相关产品推荐
相关产品推荐

