使用动态列名更新Dapper

时间:2017-02-22 13:32:35

标签: c# sql asp.net-mvc dapper

我需要进行更新,但列名称是动态的。

代码段:

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

是否可以将列名作为参数传递? 这段代码就是我所做的,但它不起作用。没有例外,但更新不起作用。

2 个答案:

答案 0 :(得分:3)

不,你不能那样做,因为列名不能是变量。 要做到这一点,你需要像这样的动态SQL:

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

在上面的代码段中,您可以将 @ 与字符串中的换行符结合使用,并将 $ 结合起来在字符串中插入变量 - 它比使用{更清晰,更短{1}}。

对于一些特定的场景,我已经使用了这样的东西。

答案 1 :(得分:2)

您应该使用String.Format

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

但是在这里你可以获得SQL注入。

因此,最好检查一下列名是表格中的列名