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

SQL Server存储过程调用异常:传入@id参数仍提示需该参数的问题求助

排查Dapper调用存储过程提示缺少参数的问题

嘿,我一眼就看出大概率是Dapper调用时没指定命令类型导致的!你看,Dapper默认会把传入的字符串当成普通SQL文本执行,而不是存储过程——这时候就算你传了参数,SQL Server也没法把参数和存储过程的@id对应上,自然就报错说缺参数了。

核心解决方案:指定CommandType为StoredProcedure

修改你的Query调用代码,加上commandType: CommandType.StoredProcedure参数即可:

public List<Bob> GetBob(int id) {
    try {
        connection();
        con.Open();
        DynamicParameters param = new DynamicParameters();
        param.Add("@id", id);
        // 关键:添加命令类型参数,告诉Dapper这是存储过程调用
        IList<Bob> EmpList = SqlMapper.Query<Bob>(con, "GetBob", param, commandType: CommandType.StoredProcedure).ToList();
        con.Close();
        return EmpList.ToList();
    } catch (Exception ex) {
        // 建议这里补充异常日志或处理逻辑
        throw;
    }
}

额外排查点(如果上面改完还是不行)

  • 确认存储过程里的参数名确实是@id,有没有拼写错误(比如写成@ID或@Id?虽然SQL Server默认不区分大小写,但完全一致能避免不必要的坑)
  • 检查connection()方法是否正确初始化了con对象,确保它不是null、连接字符串配置正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:19:58