Consulta parametrizada dinámica con dapper

c# dapper oracle sql

Pregunta

Quiero escribir una consulta con una lista dinámica de parámetros (dependiendo del parámetro establecido o no). Quiero ejecutar la consulta en una base de datos Oracle utilizando Dapper.

Código de muestra:

        var sqlParams = new List<object>();
        var sqlBuilder = new StringBuilder();
        sqlBuilder.Append("SELECT * FROM EXAMPLE WHERE 1 = 1 ");

        if (!string.IsNullOrEmpty(aParam))
        {
            sqlBuilder.Append(" AND A LIKE ?");
        }

        if (!string.IsNullOrEmpty(bParam))
        {
            sqlBuilder.Append(" AND B LIKE ? ");
        }

        var sql = sqlBuilder.ToString();

        return this.Connection.Query<Equipment>(
            sql,
            new { aParam, bParam }   // ??
            ).ToList();

Respuesta aceptada

Dapper solo funciona con parámetros con nombre. Me parece recordar que en el oráculo tienen el prefijo del colon, así que:

if (!string.IsNullOrEmpty(aParam))
{
    sqlBuilder.Append(" AND A LIKE :aParam");
}

if (!string.IsNullOrEmpty(bParam))
{
    sqlBuilder.Append(" AND B LIKE :bParam");
}

Ahora su código existente aquí:

return this.Connection.Query<Equipment>(
    sql,
    new { aParam, bParam }
    ).ToList();

Deberia trabajar. Dapper usa los nombres de los miembros del tipo anónimo como nombres de parámetros. También incluye un código muy básico para verificar si un miembro determinado no existe en el sql, por lo que si su sql solo menciona :bParam , en realidad no agregará el valor de aParam como parámetro.

En escenarios más complicados, también hay un objeto DynamicParameters que puede usar, que funciona más como un diccionario, pero no lo necesita aquí.



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é