如何根据下拉列表选择将数据库中的数据显示到面板/标签?

问题描述 投票:0回答:1

我的下拉列表中的项目是“水果”和“工具”,因此当我选择“水果”或“工具”时,我希望面板或标签从数据库中填充值,但我收到此错误:“数据为空”。不能对 Null 值调用此方法或属性

类别表

身份证 类别
1 水果
2 工具

订单表

项目 类别 金额
苹果 水果 200
香蕉 水果 100
锤子 工具 400

Asp.net核心控制器

[Route("TotalValue")]
[HttpGet]
public decimal TotalValue()
{
    var query = "Select Sum( Amount ) as Total from Order Where Category = @Category";
    string sqlDataSource = _configuration.GetConnectionString("DefaultConnection");
    decimal TotalAmount = 0;     
    string value = "Category";                 
    using (SqlConnection con = new SqlConnection(sqlDataSource))
    {
        con.Open();
        using (SqlCommand cmd = new SqlCommand(query, con))
        {   
            cmd.Parameters.AddWithValue("@Category", value);                
            using (SqlDataReader dr = cmd.ExecuteReader())
            {                        
                if (dr.Read())
                {
                    TotalAmount = dr.GetDecimal(0); 
                }
            }
        }
        con.Close();
    }
    return TotalAmount;
}

预期输出:如果我选择 Fruits 那么它应该显示 300

c# angular asp.net-core sql-server-2014-express
1个回答
0
投票

试试这个

   [Route("TotalValue")]
    [HttpGet]
    public decimal TotalValue()
    {
        var query = "SELECT SUM(Amount) AS Total FROM [Order] WHERE Category = @Category";
        string sqlDataSource = _configuration.GetConnectionString("DefaultConnection");
        decimal totalAmount = 0;
        string value = "Category";
        using (SqlConnection con = new SqlConnection(sqlDataSource))
        {
            con.Open();
            using (SqlCommand cmd = new SqlCommand(query, con))
            {
                cmd.Parameters.AddWithValue("@Category", value);
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    if (dr.HasRows && dr.Read())
                    {
                        if (!dr.IsDBNull(0))
                        {
                            totalAmount = dr.GetDecimal(0);
                        }
                    }
                }
            }
            con.Close();
        }
        return totalAmount;
    }

它会在调用 dr.Read() 之前检查 dr.HasRows。这可确保代码仅在查询返回行时才尝试读取数据。我们还添加了一个检查 !dr.IsDBNull(0) 来处理空值。如果值为空,则不会将其分配给totalAmount。

© www.soinside.com 2019 - 2024. All rights reserved.