2009-03-19 2 views
17

LIKE %% 명령을 포함 할 쿼리에 대해 C#에서 매개 변수 쿼리 용 SQL을 작성하려고합니다. 여기 C#에서 매개 변수 쿼리 생성 SQL - LIKE %

내가

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%?%'", TABLE, NAME); 
cmd.Parameters.AddWithValue(NAME, "JOHN"); 

지금 내가 시도 작동하도록 매개 변수를 얻기 위해 매일 순열을 시도했다 (데이터베이스가 파이어 버드는 것을 유의하시기 바랍니다) acheive하려고 것입니다;

  • 추가 매개 변수에 % 문자,

    cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%"); 
    
  • 또는

    cmd.Parameters.AddWithValue(NAME, "'%" + "JOHN" + "%'"); 
    
    I가 매개 변수를 사용하는 방법을 나는이 작업을 얻이 수없는 것

, LIKE 쿼리가 작동합니다.

제안 사항을 환영합니다!

+0

이 어디 명령에 SQL을 할당하는 일부 누락 된 코드가 보인다? 어떤 오류가 발생 했습니까? 아니면 쿼리 결과가 예상 한 결과가 아닙니다. –

+0

예, SQL에 Cmd.CommandText 매개 변수가 할당됩니다. –

답변

26

쿼리에서 문자열 리터럴 내에 매개 변수를 사용할 수 없습니다. 전체 값을 매개 변수를 확인하고 문자열에 와일드 카드를 추가

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE ?", TABLE, NAME); 
Cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%"); 
+0

예가 될까요? 방금 내 코드를 복사 한 것처럼 보입니다. –

+0

주의를 기울이십시오 : 그는 와일드 카드를 매개 변수로 옮겼습니다. 이 방법은 효과가 있지만 잘못된 방법입니다. –

+0

@Myhiad : 주목할 점은? like 연산자 뒤에는 와일드 카드 문자가없고 아포스트로피가 없습니다. – Guffa

-5

이전에는 이것을 SQL에 통합하여 SQL 인용을 처리하기 위해 작은 따옴표를 물음표로 바꾸 었는지 확인했습니다. 예 :

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%{2}%'", 
    TABLE, 
    NAME, 
    JOHN.Replace("'","?")); 
+1

큰 따옴표를 두 개의 작은 따옴표로 바꾸면 따옴표를 포함한 합법적 인 검색이 실제로 작동하는 것이 좋습니다. 'Replace (" '", "' '")' – Blorgbeard

+2

SQL 인젝션 공격에 노출 – Ricibald

4
var SQL = string.Format("SELECT * FROM {0} WHERE {1} LIKE '%' + ? + '%'", TABLE, NAME); 
Cmd.CommandText = SQL; 
Cmd.Parameters.Add("?", SqlDbType.VarChar, 50).Value = "JOHN"; 
+0

이 Firebird에 유효한 SQL입니까? –

+0

파이어 버드 요구 사항을 보지 못했습니다. sqlDbType 열거 형이 Sql Server 용 이었기 때문에 sql을 업데이트하여 매개 변수 코드가 잘못되었음을 확인했습니다. 나는 여전히 AddWithValue를 피하고 싶지만, –

+0

이것은 나에게 맞지 않는다. 다음 오류가 발생합니다. FirebirdSql.Data.FirebirdClient.FbException : 동적 SQL 오류 표현식 평가가 지원되지 않습니다. ----> FirebirdSql.Data.Common.IscException : 'FirebirdSql.Data.Common.IscException'유형의 예외가 발생했습니다. –