Actualizar con Dapper utilizando el nombre de columna dinámica

asp.net-mvc c# dapper sql

Pregunta

Necesito hacer una actualización, pero el nombre de la columna es dinámico.

Fragmento de código:

using (var cn = Connection)
{
    var sql = @"UPDATE Teste
        SET @columnName = @parameter,
        DT_PROCESSAMENTO = @vDtProcessamento                                        
        WHERE ID = @ID";

    var resultado = cn.Execute(sql, new
    {
        columnName,
        parameter,
        ID
    });
}

¿Es posible pasar el nombre de la columna como un parámetro? Este código es lo que hice, pero no funciona. Sin excepciones, pero la actualización no funciona.

Respuesta aceptada

No, no puedes hacer eso de esa manera porque el nombre de la columna no puede ser una variable. Para hacerlo necesitas un SQL dinámico como este:

using (var cn = Connection)
{
       var sql = $@"UPDATE Teste
                    SET {columnName} = @parameter,
                    DT_PROCESSAMENTO = @vDtProcessamento                                        
                    WHERE ID = @ID";

        var resultado = cn.Execute(sql, new
        {
                     parameter,
                     ID
        });
}

En el código de fragmento anterior, puede combinar @ para usar saltos de línea dentro de la cadena y $ para insertar variables en la cadena; es un poco más claro y más corto que usar String.Format .

Ya uso algo como esto con dapper para algunos escenarios específicos.


Respuesta popular

Deberías usar String.Format :

var columnName = "Name";
var sql = String.Format(@"UPDATE Teste
                 SET {0} = @parameter                                       
                 WHERE ID = @ID", columnName);

Pero aquí puedes obtener inyección SQL.

Por lo tanto, es mejor verificar que el nombre de la columna sea realmente el nombre de la columna en su tabla .



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é