使用Dapper+ODBC/MS Access时,如何确保多个参数的顺序



通常Dapper查询允许我做这样的事情:

string query = "SELECT * FROM some_table WHERE some_value = @MyParameter";
var parameter = new {MyParameter = 20};
connection.Query(query,parameter);

或者像这个

string query = "SELECT * FROM some_table WHERE some_value = @MyParameter";
var parameter = new DynamicParameters();
parameter.Add("@MyParameter",20);
connection.Query(query,parameter);

这不适用于OdbcConnection,因为不支持命名参数。取而代之的是一个"可用于标记参数:

string query = "SELECT * FROM some_table WHERE some_value = ?";
var parameter = new {MyParameter = 20};
connection.Query(query,parameter);

string query = "SELECT * FROM some_table WHERE some_value = ?";
var parameter = new DynamicParameters();
parameter.Add("@MyParameter",20);
connection.Query(query,parameter);

这对单个参数很有效,但我找不到任何来源告诉我多个参数会发生什么。我测试了以下内容:

string query = "SELECT * FROM some_table WHERE  some_value > ? AND some_value < ?";
var parameter = new {Min= 20, Max =30};
connection.Query(query,parameter);

string query = "SELECT * FROM some_table WHERE some_value > ? AND some_value < ?"
var parameter = new DynamicParameters();
parameter.Add("Min",20);
parameter.Add("Max",30);
connection.Query(query,parameter);

它工作得很好,但我想确定的是,我创建匿名对象属性的顺序或我向DynamicParameter添加参数的顺序是可以保证保留的。

感谢Amit Joshi的评论,我发现"伪位置参数";可以使用

string query = "SELECT * FROM some_table WHERE some_value > ?MinValue? AND some_value < ?MaxValue?"

添加到DynamicParameters或匿名对象的参数顺序就不再重要了。

最新更新