Pase el nombre de la tabla como parámetro a Dapper

dapper

Pregunta

¿Es posible pasar el nombre de la tabla como parámetro a un comando Dapper Query? No estoy buscando una función definida tabla SQL o una variable de tabla SQL. Quiero definir el nombre de la tabla dentro de C # y pasarlo a Dapper. Aquí está mi código, que cuando se ejecuta, devuelve un error de Must declare the table variable "@TableName"

var foo = conn.Query("SELECT * FROM @TableName WHERE Id = @Id", new { TableName = "MyTable", Id = 123 });

Respuesta aceptada

SQL no admite nombres de tablas parametrizadas, y dapper es un contenedor muy, muy delgado sobre SQL, entonces: no.

Sin embargo, podría usar string.format:

string sql = string.Format("... from [{0}] ...", table name);

Tenga en cuenta que incluso con el [/] esto tiene un riesgo de inyección SQL inherente.


Respuesta popular

Para scripts genéricos internos, usamos TableNameMapper para construir el sql:

public async Task<bool> DeleteAsync(int id)
{
    string tableName = Dapper.Contrib.Extensions.SqlMapperExtensions.TableNameMapper(typeof(T));
    using (var conn = new SqlConnection(ConnectionString))
    {
        int affectedRows = await conn.ExecuteAsync($"delete from {tableName} where id=@id", new { id });
        return affectedRows > 0;
    }
}


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é