gpt4 book ai didi

c# - 为什么 Dapper 在构建 Command 时会删除任何参数前缀字符?

转载 作者:行者123 更新时间:2023-11-30 12:45:14 27 4
gpt4 key购买 nike

我正在使用“ASEOLEDB.1”提供程序调用 Sybase ASE 中的存储过程。

SP 采用单个 varchar(255) 参数,称为 @PricePreference,在 SP 中默认为 NULL。

我正在使用 Dapper 的 QueryMultiple 方法,并传入一个 DynamicParameters 对象:

var parameters = new DynamicParameters();
parameters.Add("@PricePreference", "Foo");
var reader = dbConnection.QueryMultiple("myProcName", parameters, commandType: CommandType.StoredProcedure);

这段代码的行为就像我根本没有传递参数一样。看来这是因为 Dapper 的 DynamicParameters 类上的 AddParameters() 方法在我的参数名称上调用了 Clean(),它删除了“@”前缀(或其他 DBMS 的等效项 - 请参阅 MSDN 上的“使用参数占位符”here ).

没有“@”前缀,Sybase 似乎无法匹配参数。

相反,当我注释掉对 Clean() 的调用时,我从查询中得到了正确的结果。

删除“@”前缀的理由是什么?

最佳答案

简而言之:它简化了大量代码并检查我们是否只需要担心一种情况。在所有其他 RDBMS 中:它在有和没有的情况下都同样有效——当然,当您通过对象属性指定参数名称时,它们是:没有——所以这是实现标准化的明显方式。如果这不适用于特定的 RDBMS,我相信我们可以研究修复它的方法。大概只是通过信任 DynamicParameters 而不是清理它们。

关于c# - 为什么 Dapper 在构建 Command 时会删除任何参数前缀字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25408242/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com