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
相关产品推荐
相关产品推荐

