none
connexion ODBC et Visual Studio RRS feed

  • Question

  • Salut,

    Je voudrais connecter à une base de données Mysql via ODBC à partir d'un programme C sous Visual Studio 2008 Windows.
    J'ai Mysql version 4.0.15 (esayphp 1.7)
    et mysql-connector-odbc-3.51.19-win32

    j'ai testé la source de données (ODBC)qui j'ai ajouté  avec la base de données. ceci se passe bien.

    le nom de DSN est : toto
    le nom d'utilisateur : root
    le mot de passe est vide


    Voici une partie de mon programme C:


    #include <windows.h>
    #include <stdio.h>
    #include <conio.h>
    #include<stdlib.h>
    #include<string.h>
    
    #include <sql.h>
    #include <sqlext.h>
    #include <sqltypes.h>
    
    #include <sqlucode.h>
    #include <odbcinst.h>
    #include <Msdasql.h>
    #include <Msdadc.h>
    
    
    void main()
    {
    SQLRETURN retcode;
    //char design[20];
    int A,B,C,D;
    char request[100];
    //char dsn[20]="toto";
    //char uid[20]="root";
    //char pwd[20]="";
    SQLINTEGER lon,la,lb,lc,ld,taille=SQL_NTS;
    SQLCHAR design[20];
    SQLHDBC hdbc;
    SQLHENV henv;
    SQLHSTMT hstmt;
    
    
    /*Allocate environment handle */
    retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); 
    
    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) //{
       /* Set the ODBC version environment attribute */
       retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
    
       if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) //{
          /* Allocate connection handle */
          retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
    
         // if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    
        //printf("%s","vrai");
        //else
            //printf("erreur\n");
    //   }
      
    //}
    
                 
              // retcode = SQLConnect(hdbc,(SQLCHAR*)dsn, SQL_NTS,(SQLCHAR*)uid, SQL_NTS,(SQLCHAR*)pwd, SQL_NTS);
        retcode=SQLConnect(hdbc,(SQLCHAR *)"toto",SQL_NTS,(SQLCHAR *)"root",SQL_NTS,(SQLCHAR *)"",SQL_NTS);
        if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    printf("%s","vrai");
    else
    printf("Erreur sur l'instruction SQLConnect !\\n");
    
    
    SQLAllocStmt ( hdbc, &hstmt);
    SQLBindCol(hstmt,1,SQL_C_CHAR,design,sizeof(design),&lon);
    SQLBindCol(hstmt,2,SQL_C_ULONG,&A,0,&la);
    SQLBindCol(hstmt,3,SQL_C_ULONG,&B,0,&lb);
    SQLBindCol(hstmt,4,SQL_C_ULONG,&C,0,&lc);
    SQLBindCol(hstmt,5,SQL_C_ULONG,&D,0,&ld);
    //SQLExecDirect(hstmt,(UCHAR FAR *)"select * from connaissance",SQL_NTS);
    strcpy(request,"select * from ");
    strcat(request,nom_table);
    strcat(request,";");
    //strcat(request," where designation like ?");
    //SQLPrepare(hstmt,"select * from connaidiabete where designation like ?",SQL_NTS);
    SQLExecDirect(hstmt,(UCHAR FAR *)request,SQL_NTS);
    //SQLPrepare(hstmt,request."where designation like ?",SQL_NTS);
    //SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_VARCHAR,20,0,valeur,0,&taille);
    //SQLExecute(hstmt);
    
    while (SQLFetch(hstmt)!=SQL_NO_DATA)
    {
       
        if(strcmp(valeur,design)==0)
    printf("oui\n");
    
    }
    SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
    SQLFreeHandle(SQL_HANDLE_ENV,henv);
    SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
    SQLDisconnect(hdbc);
    
    //SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
    //SQLFreeHandle(SQL_HANDLE_ENV,henv);
    }
    


    Après la compilation et l'exécution j'aurais ce message:
    Erreur sur l'instruction SQLConnect !\n

    C'est à dire la connexion ne passe pas bien.

    j'ai consulté la documentation sur la chaine de connexion dans visual studio 2008 dans le
    lien suivant. Mais je ne trouve pas une solution.

    http://msdn.microsoft.com/en-us/library/ms711810(VS.85).aspx
    Comment ce problème de connexion va être résolue?
    Avez-vous un exemple de test pour tester ma connexion et traiter quelques requêtes ?

    Le reste de travail se base sur la réussite du  connexion au base des données et l'exécution des requêtes.
    SVP, j'ai besoin de votre aide.
    jeudi 9 juillet 2009 17:28

Toutes les réponses

  • Un truc tout bête, le programme est-il compilé en UNICODE ?
    Si oui, il faut écrire retcode = SQLConnect( hdbc,(SQLWCHAR*)"toto", SQL_NTS, (SQLWCHAR*)"root", SQL_NTS, (SQLWCHAR*)"", SQL_NTS ); ou retcode = SQLConnect( hdbc,(SQLWCHAR*)L"toto", SQL_NTS, (SQLWCHAR*) L "root", SQL_NTS, (SQLWCHAR*) L "", SQL_NTS );

    Qui sait ?

    MrFL.
    vendredi 30 octobre 2009 06:10