过程或函数sp_XXXX指定了太多参数

本文关键字:太多 参数 XXXX 函数 sp 过程 | 更新日期: 2023-09-27 18:18:59

我使用Dapper的dynamicparameters对象与模板参数来生成我的实体参数。在我调用存储过程之后,我得到了以下错误"过程或函数sp_MemberSave指定了太多参数"。我确实在一些实体上有额外的属性,用于业务逻辑等。是否有一种方法可以确保dapper只传递存储过程的实际参数?Dapper似乎会先读取存储过程,然后设置参数,这样它只会使用正确的参数。如何使用模板功能限制参数?

过程或函数sp_XXXX指定了太多参数

尝试从您的对象中创建一个匿名类型的适当参数…如果你的类有A、B、C和D,而你只需要A和B:

DynamicParameters(new { A = entity.A, B = entity.B });

我能说清楚吗?如果您只是传递实体(而不是DynamicParameters),则执行此分析;即conn.Execute("some sql", someEntity); -然后它将只添加someEntity的成员,它可以看到在SQL中使用。可能会有一些误报,因为它不执行完整的词法SQL分析,所以注释中的参数,即:

-- removed by Fred: where row.Date < @StartDate

仍将包括在内(因此在上面的示例中,成员StartDate将是合格的,即使它实际上可能不需要)。然而

;DynamicParameters目前信任自定义实现。我想我们可以将参数分析检查移到这一点之后,但我更愿意先了解完整的场景。