收集参数用小巧玲珑查询oracle

trx*_*trx 6 c# oracle dapper

在WEB API服务中传递参数数组时遇到问题

public class SampleController : ApiController
{
   public string Getdetails([FromUri] int[] id) 
   {
    var inconditions = id.Distinct().ToArray();
    using (var dbConn = new OracleConnection("DATA SOURCE=h;PASSWORD=C;PERSIST SECURITY INFO=True;USER ID=T"))
    {
        dbConn.Open();
        var strQuery = "SELECT PRIO_CATEGORY_ID AS PRIO, LANG_ID AS LANG, REC_DATE AS REC, REC_USER AS RECUSER, DESCR, COL_DESCR AS COL, ROW_DESCR AS DROW, ABBR FROM STCD_PRIO_CATEGORY_DESCR WHERE REC_USER  IN (:p)";
        var queryResult = dbConn.Query<SamModel>(strQuery, new { p = inconditions });
        return JsonConvert.SerializeObject(queryResult);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在调用API时http://localhost:35432/api/Sample?id=1&id=83会抛出错误说明var queryResult = dbConn.Query(strQuery);

{"ORA-00907:缺少右括号"}

在此输入图像描述

检查了所有括号,一切看起来都很好

lor*_*ond 9

无需将集合参数包装在括号中.Dapper不仅仅是查找和替换,而且智能应该自己处理集合参数.试试这个:

... WHERE REC_USER IN :p
Run Code Online (Sandbox Code Playgroud)

查看List Support部分.

在您的(:p)情况下,生成以下类型的查询:

... WHERE REC_USER IN ((1,2,3))
Run Code Online (Sandbox Code Playgroud)

  • @Nkosi ms sql只是一个例子.您需要使用语法数据库支持. (2认同)