Pregunta

Tengo una base de datos penetrante que me conecto a usar C ++. Todas mis preguntas hasta ahora es parametrizada, es decir "SELECT USER.NAME FROM USER WHERE USER.ID = ?", y que funciona bien. Pero en una consulta de búsqueda que utilizo LIKE en la cláusula WHERE, y entonces parece que no puedo usar parámetros y caracteres salvajes (%).

Mi consulta es como la siguiente "SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'" y puesto que hay dos "alrededor del parámetro? -Mark, esto falla, se buscó para perros con un? -Mark en su nombre. En SQL Server esto probablemente se resolvería mediante la concatenación de la cadena como "SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'", pero esta es la sintaxis válida en Generalizado (véase la parte inferior de esta página: http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref-04-55.html ).

También he intentado añadir los -signos% al parámetro en sí, pero eso no parece funcionar bien.

¿Alguien sabe una solución a esto?

EDIT1: Algunos ejemplos de código 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 es un _CommandPtr y m_pAdoRecordset es un _RecordsetPtr. He cambiado el nombre de las tablas SQL en este ejemplo para que hagan sens aquí.)

El código anterior devolverá una fila con un perro que tiene el nombre '%bob%', pero me gustaría que devolver todos los perros que tienen la sacudida en su nombre.

¿Fue útil?

Solución

¿Por qué no añades un comodín para el valor que está asignando al parámetro?

Por lo tanto, esto significa, la consulta se parece

SELECT * FROM dog WHERE dog.name LIKE ?

Y a continuación, se asigna el valor 'bob%%' para este parámetro, por ejemplo. Veo que usted dice que usted ha intentado esto también, pero no funciona, lo cual es muy extraño. ¿Puede mostrar el código de lo que has hecho, entonces?

también veo que se pone comillas alrededor del parámetro en uno de sus ejemplos. Esto no suena como una buena idea, ya que entonces el parámetro no será reconocido como un parámetro más. En ese momento, es sólo una cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top