Est-C ++ OTL bibliothèque de base de données SQL en utilisant des requêtes paramétrées sous le capot, ou concat chaîne?

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

  •  01-10-2019
  •  | 
  •  

Question

Je l'ai regardé l'OTL (Oracle, DB2 et Odbc-CLI Template Library) pour l'accès à la base de C. Je ne suis pas sûr de savoir si la requête je passe est converti en une requête pour la base de données paramétrées sous-jacente, ou si elle est fondamentalement juste concaténer tous les arguments dans une grande chaîne et passer la requête à la base de données de cette façon. Je vois que la requête que vous passez pour elle peut inclure des informations de type pour les arguments, mais ce qui se passe entre alors et la requête de frapper la base de données, je ne peux pas dire.

Était-ce utile?

La solution

OTL Réponse de l'auteur à mon adresse e-mail:

OTL passe des requêtes avec des espaces réservés dans les couches de l'API DB. Les conventions de nommage pour les variables de liaison réelles sont différentes pour les différents types de DB. Dites, pour Oracle,

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

sera traduit en:

SELECT * FROM staff WHERE fname=:f_name

plus un tas d'appels bind variable hôte.

Pour MS SQL Server ou DB2, la même SELECT ressemblerait à ceci:

SELECT * FROM staff WHERE fname=?

Il est décrit dans le manuel que vous ne pouvez pas avoir un espace réservé avec le même nom plus d'une fois pour MS SQL, DB2. instructions SQL avec espace réservé / bind variables sont relativement coûteuses à créer, donc si vous instancier un SQL paramétrés via un otl_stream, il est logique de réutiliser le flux autant que vous le pouvez.

Si vous avez des questions ou des suggestions sur la façon dont je peux améliorer le manuel d'OTL, ne hésitez pas à me contacter.

Cheers, Sergei

pheadbaq a écrit:

Salut, j'ai C ++ DB en train d'évaluer les bibliothèques récemment à utiliser comme base pour une bibliothèque ORM Je souhaite construire, et ont été de plus en plus gravitait vers le OTL. Il a l'air très agréable par le chemin, et semble que ce serait répondre à la plupart des besoins que j'ai. J'ai juste une question persistante que je ne peux pas sembler préciser en lisant les documents. Est-ce que OTL passe une requête paramétrée sur le SGBD sous-jacent, ou est-il concaténer les arguments et la requête que je passe au flux de OTL en une seule chaîne et que la main au SGBD?

En d'autres termes, si je la main OTL cette requête MSSQL, ainsi que par la chaîne « Bob » comme variable de liaison:

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

Est-ce que le produit de l'analyseur de OTL ceci:

SELECT * FROM staff WHERE fname = 'Bob'

Ou ceci:

SELECT * FROM staff WHERE fname = @f_name

ainsi que ma chaîne comme paramètre

J'ai posté cette même question StackOverflow.com si vous tenez à y répondre: est C ++ OTL SQL bibliothèque de base de données en utilisant des requêtes paramétrées sous le capot, ou concat chaîne?

Merci pour votre temps

Autres conseils

La documentation parle tout sur les variables se lient. Je suppose que la bibliothèque réécrire votre requête, mais il est probablement juste de changer le format des variables de liaison dans le format de votre SGBD attend, puis en liant les valeurs aux variables de liaison.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top