Bonjour

J'ai suivi le tuto sur http://vicenzo.developpez.com/tutoriels/c/ocilib/ et bien regardé le programe de test fourni avec OCILIB. Mais je me pose une question sur le BIND de parametres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
OCI_Prepare(st, "delete from test_fetch where code = :code");
OCI_BindInt(st, ":code", &code);
 
code = 3;
OCI_Execute(st);
Si je comprends bien cet exemple, la fonction OCI_BindInt va faire un "remplacement" de ":code" par la valeur de l'int code quand on fera OCI_Execute.

Mais dans le cas de la fonction OCI_BindString, je pensais pouvoir faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
OCI_Prepare(st, MT("SELECT idUser, password FROM SOUser WHERE login=:login AND deleted = 0"));
OCI_BindString(st, MT(":login"), loginStr.c_str(), loginStr.length());
 
OCI_Resultset *rs =OCI_GetResultset(st);
 
if (OCI_FetchNext(rs)) {
..
avec loginStr est un std:string. Mais la fonction OCI_BindString attend un char* et non un const char*. Je ne comprend pas trop pourquoi. Dans le cas ou on doit "binder" une std::string, faut-il a chaque fois passer par faire une copie dans un buffer (pour avoir un char*) ?

A bientot