使用动态列名称使用Dapper更新

Nat*_*ves 5 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
    });
}
Run Code Online (Sandbox Code Playgroud)

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

jea*_*ean 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
        });
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码片段中,您可以组合@以在字符串内使用换行符和$以在字符串中插入变量 - 它比使用更清晰和更短String.Format

我已经将类似的东西与 dapper 用于一些特定的场景。