connecter à une base de données Mysql via ODBC à partir du C

connecter à une base de données Mysql via ODBC à partir du C - C - Programmation

Marsh Posté le 05-07-2009 à 21:35:45    

Salut,
 
Je voudrais connecter à une base de données Mysql via ODBC à partir
d'un programme C sous Visual Studio 2008 Windows.
le nom de DSN est : pays_dsn
le nom d'utilisateur : root
le mot de passe est vide
 
le programme est:
 

Code :
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <windows.h>
  4. #include <sql.h>
  5. #include <sqlext.h>
  6. #include <sqltypes.h>
  7. intmain()
  8. {
  9. SQLHENVenv;
  10. if(!SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_ENV,NULL,&env)))
  11. fprintf(stderr,"La fonction SQLAllocHandle a echoue (SQL_HANDLE_ENV).\n" );
  12. else
  13. {
  14. if(!SQL_SUCCEEDED(SQLSetEnvAttr(env,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0)))
  15. fprintf(stderr,"La fonction SQLSetEnvAttr a echoue.\n" );
  16. else
  17. {
  18. SQLHDBCcon;
  19. if(!SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_DBC,env,&con)))
  20. fprintf(stderr,"La fonction SQLAllocHandle a echoue (SQL_HANDLE_DBC).\n" );
  21. else
  22. {
  23. SQLCHARdsn[]="pays_dsn",uid[]="root",pwd[]="";
  24. if(!SQL_SUCCEEDED(SQLConnect(con,dsn,SQL_NTS,uid,SQL_NTS,pwd,SQL_NTS)))
  25. // if ( !SQL_SUCCEEDED(SQLConnect(con,(SQLCHAR *)"pays_dsn", SQL_NTS,(SQLCHAR *)"root", SQL_NTS,(SQLCHAR *)"", SQL_NTS)) )
  26. fprintf(stderr,"La fonction SQLConnect a echoue.\n" );
  27. else
  28. {
  29. SQLHSTMTstmt;
  30. if(!SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_STMT,con,&stmt)))
  31. fprintf(stderr,"La fonction SQLAllocHandle a echoue (SQL_HANDLE_STMT).\n" );
  32. else
  33. {
  34. if(!SQL_SUCCEEDED(SQLExecDirect(stmt,"SELECT * FROM pays_tbl;",SQL_NTS)))
  35. fprintf(stderr,"La fonction SQLExecDirect a echoue.\n" );
  36. else
  37. {
  38. SQLCHARpays[15],capitale[15];
  39. printf("PAYS > CAPITALE\n\n" );
  40. while(SQL_SUCCEEDED(SQLFetch(stmt)))
  41. {
  42. SQLGetData(stmt,1,SQL_C_CHAR,pays,sizeof(pays),NULL);
  43. SQLGetData(stmt,2,SQL_C_CHAR,capitale,sizeof(capitale),NULL);
  44. printf("%-14s %-14s\n",pays,capitale);
  45. }
  46. }
  47. SQLFreeHandle(SQL_HANDLE_STMT,stmt);
  48. }
  49. SQLDisconnect(con);
  50. }
  51. SQLFreeHandle(SQL_HANDLE_DBC,con);
  52. }
  53. }
  54. SQLFreeHandle(SQL_HANDLE_ENV,env);
  55. }
  56. getch();
  57. return0;
  58. }


 
 
près la compilation et l'exécution j'aurais ce message:
 
La fonction SQLConnect a echoue.
 
J'ai pris cet exemple de lien suivant:
sur http://melem.developpez.com/langagec/odbc/ [ Lien ]
 
Comment ce problème de connexion va être résolu?
 
SVP, j'ai besoin de vos aides

Reply

Marsh Posté le 05-07-2009 à 21:35:45   

Reply

Marsh Posté le 06-07-2009 à 09:38:38    

Citation :

le nom d'utilisateur : root

Le problème vient peut-être de là. Généralement, il faut avoir un compte ordinaire sur la base de données, et souvent l'utilisation du compte administrateur ne peut se faire qu'en local.

Reply

Marsh Posté le 06-07-2009 à 10:47:36    

Salut,
root: c'est le nom d'utisateur par défaut en local.
je suis sur que ce n'est pas de nom d'utilisateur.
 
le mot de passe ? j'ai mis le mot de passe vide
c'est juste de mettre ceci sans espace: pwd[]=""

Reply

Marsh Posté le 06-07-2009 à 11:52:50    

dimadima a écrit :

J'ai pris cet exemple de lien suivant:
sur http://melem.developpez.com/


 
Cet exemple est très mauvais (le melem, ce n'est pas une lumière, pour être gentil...)
Reprends les exemples de Microsoft que ce soit du SDK ou KB, qui marchent parfaitement et sont correctement programmés (utilisables en env. de Prod ; je les utilise depuis 1992 et Win 3.1))


Message édité par Pat333 le 06-07-2009 à 11:53:49
Reply

Marsh Posté le 06-07-2009 à 20:01:17    

Salut,
 
- Pouvez-vous me citer les liens où je trouve les  exemples de Microsoft que ce soit du SDK ou KB?
- c'est quoi SDK et KB ?

Reply

Marsh Posté le 06-07-2009 à 20:26:53    

  • Software Development Kit
  • Knowledge Base


http://msdn.microsoft.com/fr-fr/default.aspx

Reply

Marsh Posté le 07-07-2009 à 21:39:46    

Salut,
 
Je ne trouve pas des exemples sur :
http://msdn.microsoft.com/fr-fr/default.aspx
 
y a il un exemple du connection à une base de données Mysql via ODBC à partir d'un programme C sous Visual Studio 2008 Windows ?
 
Merci.
 

Reply

Marsh Posté le 09-07-2009 à 20:03:38    

Salut,
 
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/li [...] S.85).aspx
 
Mais, le même problème de connexion ne marche pas .
 
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.
 
 
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed