C++を使用してPervasiveデータベースに接続しています。 これまでのすべてのクエリはパラメータ化されています。つまり、"SELECT USER.NAME FROM USER WHERE USER.ID = ?"
, などです。 しかし、検索クエリではWHERE句でLIKEを使用して、パラメータとワイルド文字(%)を使用できないようです。WHERE句でLIKEでパラメータ化されたSQLを使用する(Pervasive SQL)
私のクエリは"SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'"
のようになり、パラメータ「 - マーク」の周りに2つあるため、これは失敗し、名前に「?」マークが付いている犬を検索しました。 SQL Serverでは、これは恐らく"SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'"
のような文字列を連結することによって解決されるでしょうが、これはPervasiveの無効な構文です(このページの下部を参照してください:http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref-04-55.html)。
また、パラメータ自体に%-signsを追加しようとしましたが、どちらも機能しないようです。
誰にも解決策がありますか?
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
が_CommandPtr
で、m_pAdoRecordset
が_RecordsetPtr
である彼らが作るように、私はこの例では、SQLテーブルの名前を変更しました。
上記のコードでは、名前が'%bob%'
の犬の行が返されますが、名前にbobが含まれているすべての犬を返すようにしたいと思います。
wildcharsをパラメータ自体に追加するときの問題は、文字列として扱われるため、 '%bob%'という文字列を渡すと、dog.nameが '%bob%'に等しい場合にのみ行が返されます。 。私は私の答えにいくつかのコード例を追加します。 – fredrik
しかし、LIKE演算子を使用しますか? –
はい、私は、申し訳ありませんが、例が更新されている(と確信してコードを再度テストしました) – fredrik