2017-09-04 3 views
0

이미 문제가없는 매개 변수화 된 쿼리를 사용했지만 현재는 디버깅 할 수없는 오류가 있습니다. 이 내 작업 쿼리매개 변수가 작동하지 않는 Vb 2015 쿼리

cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente =" & strName & " or codiceamministrazione='" & strName & "' or piva='" & strName & "' or codfisc='" & strName & "'" 

동일하지만, 매개 변수, 내부 ID 또는 상업적 기반으로 클라이언트의 이름을 표시 나는 자동 완성 과정에서 이것을 사용

cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente = @Cliente or [email protected] or [email protected] or [email protected]" 
cmd.Parameters.AddWithValue("@Cliente", strName) 

작동하지 않음 라이센스 번호 (및 기타 유사한 코드). db에서 클라이언트 레코드는 컴파일 된 모든 코드 필드를 가질 수 있습니다.

매개 변수가없는 쿼리에서는 매개 변수가없는 제안 팝업이 표시되고 아무 것도 표시되지 않습니다. 오류도 없습니다.

편집 : 같은 기능에서 (semplicity에 대한 이전 생략)이

cmd.Parameters.Add("@Cliente", SqlDbType.VarChar) 
cmd.Parameters("@Cliente").Value = strName 

지금 다른 쿼리를 사용하여이 충분히 이상한 작동하지만, 나는이 질문을 한 일의 하나는하지 않습니다.

작업 :

cmd.CommandText = "select idcliente, ragsociale from Clienti where ragsociale like '%'[email protected]+'%' or [email protected]" 

여전히 작동하지 : idcliente에 대해 테스트 할 때 원래의 쿼리에서

cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente = @Cliente or [email protected] or [email protected]" 
+0

아시다시피 '@Cliente in (idcliente, codiceamministrazione, piva, codfisc)'에 다시 쓸 수 있습니다. –

+0

.AddWithValue!를 사용하지 마십시오! 나는 이것이 문제라고 생각한다. – muffi

+0

[Joel Coehoorn의 블로그 글] (https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/)에서 muffi의 말을 되풀이합니다. –

답변

0

, 당신은 수 (따옴표 그것을 라운드)로 strName을 치료하지만, 모든 다른 필드는 문자열처럼 취급합니다. 따라서 잠재적으로 숫자 나 문자열을 포함 할 수 있음을 암시하는 것입니다. 숫자를 입력하면 쿼리의 매개 변수화 된 버전이 모든 경우에 문자열과 같이 처리되므로 DB의 숫자 값인 idcliente과 일치하지 않으므로 결과가 표시되지 않을 수 있습니다.

입력 내용이 숫자이지만 쿼리가 문자열 (param의 데이터 형식으로 인해)이라고 생각하면 데이터베이스의 숫자 필드와 일치하지 않습니다. 12345 != "12345".

이러한 시나리오에 대해 별도의 매개 변수를 정의해야합니다. 같은 값을 전달할 수는 있지만 한 가지 경우에는 매개 변수의 데이터 유형을 varchar로 설정하고 다른 경우에는 int로 설정합니다 (이 작업을 수행하기 전에 값을 파싱 할 수 있는지 확인해야 할 수도 있습니다. 그렇지 않으면 가능성이 있습니다 이 경우 null 또는 0 또는 우발적 인 일치를 일으키지 않는 무언가를 설정하십시오.)