我需要进行更新,但列名称是动态的。
代码段:
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
});
}
是否可以将列名作为参数传递? 这段代码就是我所做的,但它不起作用。没有例外,但更新不起作用。
答案 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注入。
因此,最好检查一下列名是表格中的列名。