如何根据下拉列表选择展示数据库数据到Panel/Label?解决空值报错
问题分析与解决
报错核心原因
- 参数硬编码错误:你把查询参数固定写为
"Category",这不是下拉选择的实际值(比如Fruits/Tools),导致数据库找不到匹配记录,Sum(Amount)返回NULL,直接调用dr.GetDecimal(0)就会触发空值报错。 - 未接收前端选择值:控制器方法没有获取下拉框选中的Category参数,无法根据用户选择动态查询。
- 未处理空值结果:当无匹配数据时,
Sum函数会返回NULL,直接调用GetDecimal会因空值抛出异常。
修正后的控制器代码
[Route("TotalValue")] [HttpGet] // 新增参数接收前端传递的Category选择值 public decimal TotalValue([FromQuery] string category) { // Order是SQL关键字,需用方括号转义避免语法错误 var query = "Select Sum( Amount ) as Total from [Order] Where Category = @Category"; string sqlDataSource = _configuration.GetConnectionString("DefaultConnection"); decimal TotalAmount = 0; using (SqlConnection con = new SqlConnection(sqlDataSource)) { con.Open(); using (SqlCommand cmd = new SqlCommand(query, con)) { // 使用前端传递的category参数,替换硬编码的固定值 cmd.Parameters.AddWithValue("@Category", category); using (SqlDataReader dr = cmd.ExecuteReader()) { if (dr.Read()) { // 先判断字段是否为DBNull,为空则赋值0,避免报错 TotalAmount = dr.IsDBNull(0) ? 0 : dr.GetDecimal(0); } } } // using块会自动释放连接资源,无需手动调用con.Close() } return TotalAmount; }
前端配合说明
下拉框选择完成后,需要将选中的Category值(比如Fruits)作为查询参数传递到接口,示例请求地址:/TotalValue?category=Fruits
内容的提问来源于stack exchange,提问作者User_K47
相关产品推荐
相关产品推荐

