Dapper가 이와 같은 연산자를 지원합니까?

dapper sql

문제

Dapper-dot-net 사용 ...

다음은 데이터 객체에 결과를 산출하지 않습니다.

string QueryString = String.Format("select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like '%{0}%'", term);
var data = conn.Query(QueryString);

그러나, 난 그냥 같은 일반 문자열 형식을 사용하는 경우 :

string QueryString = String.Format("select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like '%{0}%'", term);
var data = conn.Query(QueryString);

나는 컬렉션에서 25 행을 되 찾는다. Dapper가 매개 변수 @T 의 끝을 올바르게 구문 분석하지 못합니까?

수락 된 답변

시험:

term = "whateverterm";
var encodeForLike = term => term.Replace("[", "[[]").Replace("%", "[%]");

string term = "%" + encodeForLike(term) + "%";
var data = conn.Query(@"
   select top 25 
  Term as Label, 
  Type, 
  ID 
  from SearchTerms 
  WHERE Term like @term", 
  new { term });

연산자 같은 것에 대해서는 특별한 것이 없으며 문자열 리터럴 내부에 매개 변수를 넣고 싶지 않고 작동하지 않습니다. 대신 문자열로 해석됩니다.

노트

두 번째 스 니펫의 하드 코딩 된 예제는 SQL 인젝션에 큰 문제가되는 것 외에도 크게 낭비 될 수 있습니다.

경고

와일드 카드를 사용하는 like 검색은 SARGable이 아니므로 속도가 느리고 색인 스캔이 필요합니다.


인기 답변

가장 좋은 방법은 concat 함수를 쿼리에 추가하기 위해서 SQL 인젝션을 저장하기 위해 사용하는 것이지만 concat 함수는 SQL 2012보다 위에 지원합니다

string query = "SELECT * from country WHERE Name LIKE CONCAT('%',@name,'%');"
var results = connection.query<country>(query, new {name});



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