Question

I ai une base de données envahissant qui me connecter à l'aide de C ++. Toutes mes requêtes jusqu'à présent est paramétrés, i.e. "SELECT USER.NAME FROM USER WHERE USER.ID = ?", et qui fonctionne très bien. Mais dans une requête de recherche J'utilise LIKE dans la clause WHERE, et il semble que je ne peux pas utiliser les paramètres et les caractères sauvages (%).

Ma requête ressemble à ceci "SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'" et comme il y a deux "autour du paramètre? -Mark, cela échoue, il recherche pour les chiens avec un? -Mark en leur nom. Dans SQL Server ce serait probablement résolu par la chaîne comme concaténer "SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'", mais ceci est une syntaxe incorrecte dans Pervasive (voir en bas de cette page: http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref-04-55.html ).

J'ai aussi essayé d'ajouter le% au paramètre -signs lui-même, mais cela ne semble pas fonctionner non plus.

Quelqu'un sait-il une solution à cela?

EDIT1: Voici quelques exemples de code 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 est un _CommandPtr et m_pAdoRecordset est un _RecordsetPtr. J'ai changé le nom des tables SQL dans cet exemple afin qu'ils font ici sens.)

Le code ci-dessus renvoie une ligne avec un chien qui porte le nom '%bob%', mais je voudrais revenir à tous les chiens qui ont bob à leur nom.

Était-ce utile?

La solution

Pourquoi ne pas ajouter un joker à la valeur que vous affectez au paramètre?

Alors, cela signifie, votre requête ressemble

SELECT * FROM dog WHERE dog.name LIKE ?

Et puis, vous attribuez à ce paramètre, par exemple la valeur '% bob%. Je vois que vous dites que vous avez essayé cela aussi, mais il ne fonctionne pas, ce qui est très étrange. Pouvez-vous montrer le code de ce que vous avez fait alors?

Je vois aussi que vous mettez des guillemets autour du paramètre dans l'un de vos exemples. Cela ne semble pas être une bonne idée, car le paramètre ne sera pas reconnu comme un paramètre plus. À ce moment-là, il est juste une chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top