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

ASP.NET Core参数化方法中@Category标量变量声明及错误解决

解决“Must declare the scalar variable @Category”错误

错误原因很明确:你在SQL语句里使用了@Category参数,但没有在SqlCommand中定义并赋值这个参数,数据库无法识别这个未声明的变量。

按以下步骤修改代码:

  1. 让接口接收Category参数(通过URL路径或查询参数传递都可以)
  2. 在SqlCommand实例中添加@Category参数并赋值

修改后的完整代码示例:

[Route("TotalValue/{category}")]
[HttpGet]
public decimal TotalValue(string category)
{
    // 如果是要计算总价值,建议把查询改成聚合函数,比如Sum(对应数值字段名),根据你的实际表字段调整
    var query = "Select Sum(ValueColumn) from OrderDetail where Category = @Category";
    string sqlDataSource = _configuration.GetConnectionString("DefaultConnection");
    decimal total = 0;

    using (SqlConnection con = new SqlConnection(sqlDataSource))
    {
        con.Open();

        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            // 在这里添加并赋值参数,推荐指定参数类型的写法,避免类型转换问题
            cmd.Parameters.Add("@Category", SqlDbType.VarChar, 50).Value = category;
            // 简单场景也可以用AddWithValue,但不如指定类型安全
            // cmd.Parameters.AddWithValue("@Category", category);

            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.Read() && !dr.IsDBNull(0))
                {
                    total = dr.GetDecimal(0); 
                }
            }
        }
        // using块会自动释放连接资源,不需要手动调用con.Close()
    }

    return total;
}

额外说明:

  • 原代码里的Select *如果是要计算总价值,建议改成聚合查询(比如Sum(数值字段名)),否则读取第一行第一列的decimal值可能不符合你的业务需求
  • using块会自动处理连接的释放,不需要手动调用con.Close()
  • 指定参数类型的写法比AddWithValue更安全,能避免潜在的类型转换错误和SQL注入风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:46:10