2012-10-30 4 views
0

C#을 통해 SqlCommand을 사용하여 쿼리를 실행하고 있습니다. 쿼리 중 하나는 예상대로 수행되지만, 복잡하게 만들면 이해가 안되는 이상한 결과가 나타납니다. 나는 누군가가이 공동체가 지금보다 더 잘 이해할 수 있기를 바라고 있습니다.LIKE로 쿼리가 작동하지 않습니다.

아래 코드가 제대로 실행되어 제공된 텍스트가 포함 된 제목이있는 레코드를 찾습니다.

comm.CommandText = "SELECT * FROM tbl_records WHERE Title LIKE '%' + @title + '%'"; 
comm.Parameters.AddWithValue("id", Request.QueryString["idortitle"]); 
comm.Parameters.AddWithValue("title", Request.QueryString["idortitle"]); 

그러나 아래 섹션을 추가하면 반환되는 유일한 결과는 id와 일치하는 결과입니다. 부분 일치하는 제목의 결과는 제외됩니다. 왜 이런 일이 일어나는 걸까요?

comm.CommandText = "SELECT * FROM tbl_records WHERE Title LIKE '%' + @title + '%' OR [email protected]"; 
comm.Parameters.AddWithValue("id", Request.QueryString["idortitle"]); 
comm.Parameters.AddWithValue("title", Request.QueryString["idortitle"]); 
+0

같은 구조로 브라켓을 시도해보십시오. 'SELECT * FROM tbl_requests WHERE (제목 LIKE '%'+ @title + '%') 또는 Id = @ id' –

+0

@ 패트릭 사과. 복사 붙여 넣기 오류입니다. 위의 수정했습니다. 잘 잡으세요! – steventnorris

+0

@Asad 그 일찍 시도했지만 변화는 없었습니다. – steventnorris

답변

0

이 매개 변수를 기반으로하고 숫자가 아니며 id 필드가 숫자이므로 오류가 발생하지 않고 쿼리에서 오류가 발생했습니다. ID 필드에 대해 확인하기 위해 숫자 응답 만 사용되도록 확인이 추가되면 코드가 작동합니다. 아래 코드를 참조하십시오 :

int x; 

      comm.CommandText = "SELECT * FROM tbl_requests WHERE Title LIKE '%' + @title + '%'"; 
      comm.Parameters.AddWithValue("title", Request.QueryString["idortitle"]); 
      if(int.TryParse(Request.QueryString["idortitle"],out x)){ 
       comm.CommandText += " OR [email protected]"; 
       comm.Parameters.AddWithValue("id", x); 
      } 
+0

매개 변수 유형을 적용하는 쉬운 방법이 있습니다. 내 대답을 보라. –

0

대신에이 코드를 사용해보십시오 :

comm.CommandText = "SELECT * FROM tbl_records WHERE Title LIKE '%@title%' OR Id = @id"; 
comm.Parameters.AddWithValue("@id", Request.QueryString["idortitle"]); 
comm.Parameters.AddWithValue("@title", Request.QueryString["idortitle"]); 
1

쿼리에서 그들을 매개 변수 값에 와일드 카드를 배치하는 대신 사용해보십시오 :

comm.CommandText = "SELECT * FROM tbl_records WHERE (Title LIKE @title) OR ([email protected])"; 
comm.Parameters.AddWithValue("@id", Request.QueryString["idortitle"]); 
comm.Parameters.AddWithValue("@title", "%" + Request.QueryString["idortitle"] + "%"); 
+0

위의 설명에서 언급 한 바와 같이, 이것은 OP –

+0

@Asad - Noted에서 수정되지 않았으며 해결되었습니다. –

관련 문제