Es la base de datos de la biblioteca C ++ OTL SQL mediante consultas con parámetros bajo el capó, o concat cuerda?

StackOverflow https://stackoverflow.com/questions/3149974

  •  01-10-2019
  •  | 
  •  

Pregunta

He estado buscando en la comunicación cara a cara (Oracle, ODBC y DB2 CLI-Template Library) para C ++ acceso a la base de datos. No estoy seguro de si la consulta que pase en se convierte en una consulta parametrizada para la base de datos subyacente, o si es básicamente la concatenación de todos los argumentos en una cadena grande y pasa la consulta a la base de datos de esa manera. Veo que la consulta se pasa en que puede incluir información de tipo para los argumentos, pero lo que sucede entre ese momento y la consulta de golpear la base de datos, no puedo decir.

¿Fue útil?

Solución

OTL la respuesta del autor a mi dirección de e-mail:

OTL pasa consultas con marcadores de posición en las capas de la API de DB. Las convenciones de nombres de variables se unen reales son diferentes para diferentes tipos de base de datos. Por ejemplo, para Oracle,

SELECT * FROM staff WHERE fname=:f_name<char[20]>

se traducirá en:

SELECT * FROM staff WHERE fname=:f_name

además de un montón de llamadas bind variables de acogida.

Para MS SQL Server o DB2, el mismo SELECT se vería así:

SELECT * FROM staff WHERE fname=?

Se describe en el manual que no se puede tener un marcador de posición con el mismo nombre más de una vez para MS SQL, DB2. sentencias SQL con marcadores de posición / bind variables son relativamente caros de crear, por lo que si una instancia de un SQL parametrizada a través de un otl_stream, tiene sentido volver a utilizar la corriente lo más que pueda.

Si usted tiene más preguntas, o sugerencias sobre cómo puedo mejorar el manual de comunicación cara a cara, no dude en enviarme un correo electrónico.

Cheers, Sergei

pheadbaq escribió:

Hola, he estado evaluando C ++ bibliotecas DB recientemente para su uso como una base para un ORM por deseo de construir, y han estado gravitando cada vez más hacia la comunicación cara a cara. Se ve muy bien por cierto, y parece que sería satisfacer la mayoría de las necesidades que tengo. Sólo tengo una pregunta persistente que parece que no puede aclarar mediante la lectura de los documentos. ¿El OTL pasar una consulta parametrizada a los DBMS subyacentes, o es la concatenación de los argumentos y la consulta Paso al flujo de comunicación cara a cara en una sola cadena y la mano que al DBMS?

En otras palabras, si la mano OTL esta consulta MSSQL, junto con la cadena "Bob", como la variable de vinculación:

SELECT * FROM staff WHERE fname = :f_name<char[20]>

¿El producto OTL analizador esto:

SELECT * FROM staff WHERE fname = 'Bob'

O esto:

SELECT * FROM staff WHERE fname = @f_name

junto con mi cadena como parámetro

He publicado esta misma pregunta a StackOverflow.com si es que quiere responder allí: es C ++ OTL SQL biblioteca de base de datos mediante consultas con parámetros bajo el capó, o concat cuerda?

Gracias por su tiempo

Otros consejos

La documentación habla todo acerca de las variables se unen. Asumo que la biblioteca es volver a escribir la consulta, pero probablemente sólo cambiar el formato de las variables se unen en el formato de su DBMS Espera, y luego unir los valores de las variables se unen.

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