使用参数化SQL与在那里的条款的(普遍的SQL)
-
12-09-2019 - |
题
我有一个普遍的数据库连接,使用C++。我所有的查询迄今为止是参数,i。e "SELECT USER.NAME FROM USER WHERE USER.ID = ?"
,
和工作的罚款。但是,在搜索查询我喜欢使用在那里的条款,那么它似乎是我不能使用参数和野生字符的(%).
我查询看起来像这样的东西 "SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'"
因为有两周围的参数?-标记,这一失败,它搜索犬?-标记在他们的名字。在SQL服务器上,这可能会解决的串连串像 "SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'"
, 但这是无效的语法在普遍存在(见下网页: 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
是一个 _CommandPtr
, , m_pAdoRecordset
是一个 _RecordsetPtr
.我已经改变了名称的SQL表在这个例子所以他们让桑斯在这里.)
上述代码将返回的行与一只狗的名字 '%bob%'
, 但我想要返回的所有狗,有鲍勃在他们的名字。
解决方案
为什么你不添加一个通配符的价值是分配给参数?
因此,这意味着,您的查询看起来像
SELECT * FROM dog WHERE dog.name LIKE ?
然后,你分配的价值'%鲍勃%,这个参数,例如。我看你说你已经试过这样好,但是它不工作,这是非常奇怪的。你能告诉代码你做了什么然后呢?
我也看到你放在引号的参数在其中一个例子。这听起来可不像个好主意,因为随后的参数不会被承认为一个参数了。在这一点上,它只是一串。