You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据库无记录时返回0的实现及SqlNullValueException报错解决

问题解决:处理Sum查询返回Null引发的SqlNullValueException

问题详情

运行项目时反复出现以下错误:

System.Data.SqlTypes.SqlNullValueException: 'Data is Null. This method or property cannot be called on Null values.'

需求明确:即使数据库表无数据行,查询结果也需返回0。

现有代码:

public int Plantcount()
{
    var query = "SELECT Sum(Amount ) as Total FROM Carttable";
    string sqlDataSource = _configuration.GetConnectionString("DefaultConnection");
    int totalAmount = 0;

    using (SqlConnection con = new SqlConnection(sqlDataSource))
    {
        con.Open();
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.Read())
                {
                    totalAmount = dr.GetInt32(0); 
                }
            }
        }
        con.Close();
    }
    return totalAmount;
}    

当前数据库表状态:

IdItemTotal
---

期望输出:

Total
0

解决方案

两种可行方案,任选其一即可:

方案1:修改SQL语句,强制返回0

当表无数据时,SUM(Amount)会返回Null,用ISNULL或COALESCE函数将Null替换为0:

SELECT ISNULL(Sum(Amount), 0) as Total FROM Carttable

或:

SELECT COALESCE(Sum(Amount), 0) as Total FROM Carttable

此方式下SQL直接返回0,C#代码无需额外处理。

方案2:在C#代码中判断Null值

若不想修改SQL,可在读取数据时先检查字段是否为Null:

public int Plantcount()
{
    var query = "SELECT Sum(Amount ) as Total FROM Carttable";
    string sqlDataSource = _configuration.GetConnectionString("DefaultConnection");
    int totalAmount = 0;

    using (SqlConnection con = new SqlConnection(sqlDataSource))
    {
        con.Open();
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.Read())
                {
                    totalAmount = dr.IsDBNull(0) ? 0 : dr.GetInt32(0); 
                }
            }
        }
        // using块会自动关闭连接,无需手动调用con.Close()
    }
    return totalAmount;
}    

注:SqlConnection在using块结束后会自动释放并关闭连接,可删除多余的con.Close()调用。

内容的提问来源于stack exchange,提问作者Ken John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 01:27:37