Connexion MySQL en C : Probleme de requete

janin900 Messages postés 1 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 19 octobre 2006 - 19 oct. 2006 à 17:35
sambalien Messages postés 3 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 11 janvier 2010 - 14 mai 2009 à 17:47
Bonjour,


je voudrais savoir si il est possible en C d'initialiser une connexion
avec une BDD type MySQL, et de réaliser des requetes avec cette
connexion mais bien plus tard.

Je m'explique :

Etant donné que l'executable est censé excécuter beaucoup de requetes à
la BDD, je ne veux pas à chaque fois réinitialiser la connexion à la
BDD, mais garder mon pointeur sur mon objet de type MYSQL.

Cependant, entre le moment où j'initialise ma connexion à la BDD et le
moment où j'exécute mes requetes, je fais plusieurs opérations dont par
exemple du pooling... et ca me provoque des erreurs de style
CR_COMMANDS_OUT_OF_SYNC...

Est-ce normal d'après vous ? Y a t'il un moyen de contourner ceci ?


Merci 

Julien

2 réponses

cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
19 oct. 2006 à 22:57
Bonsoir,

Qu'est ce que le pooling ??? (je connaissais le 8 pool).
Se connecter à une base mysql en début d'appli et se déconnecter quand on a finit, je ne vois le problème. C'est ce que je fais  et je n'ai jamais eu de soucis.
Il me semble, par contre, que si on reste connecté un certain temps, il y a une sorte de time-out qui te deconnecte automatiquement. Mais cela doit être modifiable (voir le my.cnf). J'ai remarqué cela quand j'avais oublié de fermer mon appli avant de partir le soir et la trouver le lendemain matin, déconnectée.

Matt...
0
sambalien Messages postés 3 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 11 janvier 2010
14 mai 2009 à 17:47
Avec la source suivante j'essaie de connecter access avec C j'utilise le Dec C++ comme compilateur.  apres la compilation le linker renvoie 1 comme valeur et mon exe donne une erreur, j'ignore pourquoi la liason ne se fait pas alors je souhaite avoir votre aide.. merci de bien vouloir me repondre.
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
// #include <sqltype.h>

int main()
{
    SQLHENV environnement;  // cette varible cree l'environnement qui sera le parent de notre connexion
    if ( !SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_ENV, NULL, &environnement)) )
        fprintf(stderr, "La fonciton SQLAllocHandle a echoue.\n");
    else
    {
        if ( !SQL_SUCCEEDED(SQLSetEnvAttr(environnement, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0)) )
            fprintf(stderr, "La fonction SQLSetEnvAttr a echoue.\n");
        else {
             SQLHDBC connexion;
             
             if ( !SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_DBC, environnement, &connexion)) )
                 fprintf(stderr, "La fonction SQLAllocHandle a echoue (SQL_HANDLE_DBC).\n");
             else {
                  SQLCHAR dsn[] = "pays_dsn", uid[] = "melem", pwd[] = "1234";
                  
                  if ( !SQL_SUCCEEDED(SQLConnect(connexion, dsn,SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS)) )
                      fprintf(stderr, "La fonction SQLConnect a echoue.\n");
                  else {
                       SQLHSTMT statement;
                       
                       if( !SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_STMT, connexion, &statement)) )
                           fprintf(stderr, "La fonction SQLAllocHandle a echoue (SQL_HANDLE_STMT).\n");
                       else {
                                if ( !SQL_SUCCEEDED(SQL_ExecDirect(statement, "SELECT * FROM pays_tbl;", SQL_NTS)) )
                                    fprintf(stderr, "La fonction SQL_ExecDirect a echoue.\n");
                                else {
                                     SQLCHAR pays[15], capitale[15];
                                     printf("PAYS > CAPITALE\n\n");
                                     
                                     while (SQL_SUCCEEDED(SQLFetch(statement)) )
                                     {
                                           SQLGetData(statement, 1, SQL_C_CHAR, pays, sizeof(pays), NULL);
                                           SQLGetData(statement, 2, SQL_C_CHAR, capitale, sizeof(capitale), NULL);
                                           printf("%-14s %-14s", pays, capitale);
                                           }
                                     }
                                    SQLFreeHandle(SQL_HANDLE_STMT, statement);    
                            }
                            SQLDisconnect(connexion);
                       }
                       SQLFreeHandle(SQL_HANDLE_DBC, connexion);
                  }
                 
             }
              SQLFreeHandle(SQL_HANDLE_ENV, environnement);
        }
        return 0;
}
0
Rejoignez-nous