我在使用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.
答案 0 :(得分:0)
如果这是您的代码,则您的代码无法编译。您没有为前三个参数提供任何值,并且给了非法字符而不是第四个参数中的字符串。我没有理由不这样做:
var results = await connection
.QueryAsync<Certificate>(query,
new { companyId=1, projectId=1, contractId=1, invoiceIds = new [] { "1a", "1b", "2a" }});