동적 열 이름을 사용하여 Dapper로 업데이트

asp.net-mvc c# dapper sql

문제

업데이트를해야하지만 열 이름이 동적입니다.

코드 스 니펫 :

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

매개 변수로 열 이름을 전달할 수 있습니까? 이 코드는 내가 한 일이지만 작동하지 않습니다. 예외는 없지만 업데이트가 작동하지 않습니다.

수락 된 답변

열 이름이 변수가 될 수 없으므로 그렇게 할 수 없습니다. 이를 위해 동적 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
        });
}

위의 스 니펫 코드에서 @ 를 결합하여 문자열 내부에 줄 바꿈을 사용하고 $ 를 사용하여 문자열에 변수를 삽입 할 수 있습니다. String.Format 사용하는 것보다 조금 더 명확하고 짧습니다.

나는 이미 몇 가지 특정 시나리오에 대해 위와 같은 것을 사용합니다.


인기 답변

String.Format 사용해야합니다.

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

하지만 여기서 SQL 인젝션을 얻을 수 있습니다.

따라서 열 이름이 실제로 테이블의 열 이름인지 확인하는 것이 좋습니다 .



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow