dapper를 사용하여 일반적인 매개 변수가있는 sql 쿼리

c# dapper

문제

이 일반적인 방법을 사용하고 있습니다.

protected IEnumerable<T> ExecuteSprocQuery<T>(string sproc, object objectParams)
{
    using (var conn = OpenConnection())
    {
    var list = conn.Query<T>(sproc, null, commandType: CommandType.StoredProcedure);
    return list;
    }
}

다음과 같은 저장 프로 시저를 호출합니다.

ExecuteSprocQuery<SomePoco>("SomeSproc", new { P1 = p1, P2 = p2 }).ToList().FirstOrDefault();

매개 변수화 된 SQL 쿼리에 대해 비슷한 것을 구현하려고합니다.

protected IEnumerable<T> ExecuteQuery<T>(string sqlString, object objectParams)
{
    using (var conn = OpenConnection())
    {
    var list = conn.Query<T>(sqlString, null, commandType: CommandType.Text);
    return list;
    }
}

그러나 이와 같은 것은 오류를 던집니다 :

ExecuteQuery<int?>("Select id from [dbo].[TableName] where [X] = @x ", new { @x  = 1}).FirstOrDefault();

어떤 아이디어?

추신:

오류 :

Additional information: Must declare the scalar variable "@x".

수락 된 답변

메서드 내에서 params 객체를 Query ()에 전달하지 않는 것 같습니다. SP에 대한 코드가 없으면 알 수 없지만 매개 변수로 null을 허용하여 실패하지는 않을 것입니다. 원시 SQL은 대부분 충돌 할 것입니다.

var list = conn.Query<T>(sproc, objectParams, commandType: CommandType.StoredProcedure);

var list = conn.Query<T>(sqlString, objectParams, commandType: CommandType.Text);


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.