我有一個使用C++連接到的Pervasive數據庫。 到目前爲止,我所有的查詢都是參數化的,即"SELECT USER.NAME FROM USER WHERE USER.ID = ?"
, ,這工作正常。 但在搜索查詢中,我在WHERE子句中使用LIKE,然後看起來我不能使用參數和通配符(%)。在WHERE子句中使用帶LIKE的參數化SQL(普適SQL)
我的查詢看起來像這樣"SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'"
由於有兩個'圍繞參數?標記,這失敗了,它搜索狗的名字中帶有?標記的狗。在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添加到參數本身的問題是,它們被視爲字符串,因此如果dog.name等於'%bob%',那麼傳遞字符串'%bob%'將僅返回一行。 。我會在我的答案中添加一些代碼示例。 – fredrik 2009-07-10 09:24:19