Parámetros de recopilación que consultan Oracle con dapper

c# dapper oracle

Pregunta

Tener problemas al pasar la matriz de parámetros en el servicio de API WEB

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);
    }
}

Ahora, al llamar a la API como http://localhost:35432/api/Sample?id=1&id=83 arroja un error que dice sobre var queryResult = dbConn.Query(strQuery);

{"ORA-00907: falta paréntesis derecho"}

enter image description here

Comprueba todos los paréntesis y todo se ve bien

Respuesta aceptada

No es necesario ajustar los parámetros de su colección entre paréntesis. Dapper no es solo encontrar y reemplazar, sino lo suficientemente inteligente como para manejar los parámetros de recolección por sí mismo. Prueba esto:

... WHERE REC_USER IN :p

Consulte la sección List Support .

En su caso (:p) después del tipo de consulta generada:

... WHERE REC_USER IN ((1,2,3))

Respuesta popular

@lorond lo hizo bien con su comentario y respuesta .

Los enlaces que proporcionó confirman que su código puede ser refactorizado a

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);
    }
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué