为什么Dapper在构建命令时会删除任何参数前缀字符?

时间:2014-08-20 15:06:52

标签: c# dapper sybase-ase

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

SP采用一个名为@PricePreference的varchar(255)参数,该参数在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上的'使用参数占位符'{{3 }})。

如果没有'@'前缀,Sybase似乎无法匹配参数。

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

删除'@'前缀背后的理由是什么?

1 个答案:

答案 0 :(得分:1)

简而言之:它简化了大量代码并检查我们是否只需要担心一个场景。在所有其他RDBMS中:无论有没有它都可以正常工作 - 当然,当您通过对象属性指定参数名称时,它们是:没有 - 所以这是显而易见的方法。如果这不适用于特定的RDBMS,我相信我们可以研究修复它的方法。大概只是信任DynamicParameters而不是清理它们。