如何使用带有WHERE IN的多个参数的Dapper查询ODBC?

时间:2019-05-22 12:20:23

标签: sql odbc dapper

我在使用Dapper查询ODBC提供程序时遇到了一个问题。有问题的查询提供了几个参数。其中一个参数用于填充WHERE IN运算符。

到目前为止,我已经尝试为查询提供以下内容:DynamicParameters?常规参数,?name?伪位置参数以及它们的某些组合。

SELECT companyId
    ,projectId
    ,contractId
    ,status
FROM certificate
WHERE companyId = ?companyId?
    AND projectId = ?projectId?
    AND contractId = ?contractId?
    AND invoiceId IN ?invoiceIds?
var results = await connection
    .QueryAsync<Certificate>(query, new { companyId, projectId, contractId, invoiceIds = new string[] { '1a', '1b', '2a' }});

预期结果是返回了几行。如果我使用其参数对查询进行硬编码,则可以正常工作,因此我提供的数据应返回行。

相反,我收到了以下消息的异常:

ERROR [07001] [DataDirect][ODBC Progress OpenEdge Wire Protocol driver]Value has not been specified for parameter 4.
ERROR [07001] [DataDirect][ODBC Progress OpenEdge Wire Protocol driver]Value has not been specified for parameter 5.

1 个答案:

答案 0 :(得分:0)

如果这是您的代码,则您的代码无法编译。您没有为前三个参数提供任何值,并且给了非法字符而不是第四个参数中的字符串。我没有理由不这样做:

var results = await connection
    .QueryAsync<Certificate>(query, 
         new { companyId=1, projectId=1, contractId=1, invoiceIds = new [] { "1a", "1b", "2a" }});