문제

C ++를 사용하는 데 연결하는 퍼베이시브 데이터베이스가 있습니다. 지금까지의 모든 쿼리는 매개 변수화되었습니다 "SELECT USER.NAME FROM USER WHERE USER.ID = ?"그리고 그것은 잘 작동합니다. 그러나 검색 쿼리에서 나는 WHERE 절에서 사용하면 매개 변수와 와일드 숯 (%)을 사용할 수없는 것 같습니다.

내 쿼리는 이런 식으로 보입니다 "SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'" 그리고 매개 변수 주위에 두 개의 '가 있으므로, 이것은 실패하기 때문에, 그것은 그들의 이름으로? -mark를 가진 개를 검색했습니다. SQL Server에서 이것은 아마도 문자열을 연결하여 해결 될 것입니다. "SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'", 그러나 이것은 Pervasive의 잘못된 구문입니다 (이 페이지의 하단 참조 : http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref-04-55.html).

또한 매개 변수 자체에 %신호를 추가하려고했지만 작동하지 않는 것 같습니다.

누구든지 이것에 대한 해결책을 아는 사람이 있습니까?

edit1 :일부 C ++ 코드 예 :

CString sqlCommand = "SELECT * FROM DOG WHERE DOG.NAME LIKE ?;";
m_pAdoCommand->CommandText = _bstr_t(sqlCommand);
m_pAdoCommand->Parameters->Append( m_pAdoCommand->CreateParameter("p0", adVarChar, adParamInput, 25, _bstr_t("'%bob%'")) );
m_pAdoRecordset = m_pAdoCommand->Execute(NULL,NULL,adCmdText);

(m_pAdoCommand a _CommandPtr, 그리고 m_pAdoRecordset a _RecordsetPtr. 이 예제에서 SQL 테이블의 이름을 변경하여 여기에서 감지를 만듭니다.)

위의 코드는 이름이있는 개와 함께 행을 반환합니다. '%bob%', 그러나 나는 밥이있는 모든 개를 그들의 이름으로 돌려주고 싶습니다.

도움이 되었습니까?

해결책

매개 변수에 할당하는 값에 와일드 카드를 추가하지 않는 이유는 무엇입니까?

따라서 이것은 귀하의 쿼리가 모양을 의미합니다

SELECT * FROM dog WHERE dog.name LIKE ?

그런 다음 예를 들어이 매개 변수에 값 '%bob%'를 할당합니다. 나는 당신이 이것을 시도했다고 말하는 것을 봅니다. 그러나 그것은 작동하지 않으며, 그것은 매우 이상합니다. 당신이 한 일의 코드를 보여줄 수 있습니까?

또한 예제 중 하나에 매개 변수 주위에 인용문을 넣는 것을 알 수 있습니다. 이것은 좋은 생각처럼 들리지 않습니다. 그 이후로 매개 변수는 더 이상 매개 변수로 인식되지 않습니다. 그 시점에서 그것은 단지 끈 일뿐입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top