동적 인 매개 변수화 된 쿼리

c# dapper oracle sql

문제

필자는 매개 변수의 동적 목록을 가진 쿼리를 작성하려고합니다 (매개 변수가 설정되었는지 여부에 따라 다름). 나는 dapper를 사용하여 오라클 데이터베이스에서 쿼리를 실행하려고합니다.

샘플 코드 :

        var sqlParams = new List<object>();
        var sqlBuilder = new StringBuilder();
        sqlBuilder.Append("SELECT * FROM EXAMPLE WHERE 1 = 1 ");

        if (!string.IsNullOrEmpty(aParam))
        {
            sqlBuilder.Append(" AND A LIKE ?");
        }

        if (!string.IsNullOrEmpty(bParam))
        {
            sqlBuilder.Append(" AND B LIKE ? ");
        }

        var sql = sqlBuilder.ToString();

        return this.Connection.Query<Equipment>(
            sql,
            new { aParam, bParam }   // ??
            ).ToList();

수락 된 답변

Dapper는 명명 된 매개 변수로만 작동합니다. 나는 오라클에서 콜론 접두어로 사용되었다는 사실을 기억하는 것 같습니다.

if (!string.IsNullOrEmpty(aParam))
{
    sqlBuilder.Append(" AND A LIKE :aParam");
}

if (!string.IsNullOrEmpty(bParam))
{
    sqlBuilder.Append(" AND B LIKE :bParam");
}

이제 기존 코드는 다음과 같습니다.

return this.Connection.Query<Equipment>(
    sql,
    new { aParam, bParam }
    ).ToList();

작동해야합니다. Dapper는 매개 변수 이름으로 익명 형식의 멤버 이름을 사용합니다. 그것은 또한 특정 멤버가 SQL에 존재하지 않는지 확인하는 몇 가지 매우 기본적인 코드를 포함하므로 SQL에 :bParam 언급하면 실제로 매개 변수로 aParam 값을 추가하지는 않습니다.

좀 더 복잡한 시나리오에서는 사용할 수있는 DynamicParameters 객체가 있는데, 그 객체는 사전과 같은 기능을 수행하지만 여기서는 필요하지 않습니다.



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