我有一个普遍的数据库连接,使用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 ?

然后,你分配的价值'%鲍勃%,这个参数,例如。我看你说你已经试过这样好,但是它不工作,这是非常奇怪的。你能告诉代码你做了什么然后呢?

我也看到你放在引号的参数在其中一个例子。这听起来可不像个好主意,因为随后的参数不会被承认为一个参数了。在这一点上,它只是一串。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top