Connecter à une base de données Mysql via ODBC à partir d'un programme C sous Visual Studio 2008 Windows.

Le
programmation
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

#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>

int main()
{
SQLHENV env;

if ( !SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_ENV, NULL, &env)) )
fprintf(stderr, "La fonction SQLAllocHandle a echoue
(SQL_HANDLE_ENV).");
else
{
if ( !SQL_SUCCEEDED(SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION,
(void *)SQL_OV_ODBC3, 0)) )
fprintf(stderr, "La fonction SQLSetEnvAttr a echoue.");
else
{
SQLHDBC con;

if ( !SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_DBC, env,
&con)) )
fprintf(stderr, "La fonction SQLAllocHandle a echoue
(SQL_HANDLE_DBC).");
else
{
SQLCHAR dsn[] = "pays_dsn", uid[] = "root", pwd[] =
"";

if ( !SQL_SUCCEEDED(SQLConnect(con, dsn, SQL_NTS, uid,
SQL_NTS, pwd, SQL_NTS)) )
// if ( !SQL_SUCCEEDED(SQLConnect(con,(SQLCHAR *)"pays_dsn",
SQL_NTS,(SQLCHAR *)"root", SQL_NTS,(SQLCHAR *)"", SQL_NTS)) )
fprintf(stderr, "La fonction SQLConnect a echoue.
");
else
{
SQLHSTMT stmt;

if ( !SQL_SUCCEEDED(SQLAllocHandle
(SQL_HANDLE_STMT, con, &stmt)) )
fprintf(stderr, "La fonction SQLAllocHandle a
echoue (SQL_HANDLE_STMT).");
else
{
if ( !SQL_SUCCEEDED(SQLExecDirect(stmt,
"SELECT * FROM pays_tbl;", SQL_NTS)) )
fprintf(stderr, "La fonction SQLExecDirect
a echoue.");
else
{
SQLCHAR pays[15], capitale[15];

printf("PAYS > CAPITALE");

while (SQL_SUCCEEDED(SQLFetch(stmt)))
{
SQLGetData(stmt, 1, SQL_C_CHAR, pays,
sizeof(pays), NULL);
SQLGetData(stmt, 2, SQL_C_CHAR,
capitale, sizeof(capitale), NULL);
printf("%-14s %-14s", pays,
capitale);
}
}

SQLFreeHandle(SQL_HANDLE_STMT, stmt);
}

SQLDisconnect(con);
}

SQLFreeHandle(SQL_HANDLE_DBC, con);
}
}

SQLFreeHandle(SQL_HANDLE_ENV, env);
}
getch();
return 0;
}

Après la compilation et l'exécution j'aurais ce message:

La fonction SQLConnect a echoue.

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

Comment ce problème de connexion va être résolue?

SVP, j'ai besoin de vos aides.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
domi
Le #19702011
programmation wrote:
Salut,

Je voudrais connecter à une base de données Mysql via ODBC à partir
d'un programme C sous Visual Studio 2008 Windows.



/....
/....
La fonction SQLConnect a echoue.

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

Comment ce problème de connexion va être résolue?



Eviter ce genre de lien (surtout ce site..)
et prends les nombreux exemples de Msdn, comme
http://support.microsoft.com/kb/252699 ,
notamment pour la gestion d'erreurs , fonction HandleError pour savoir
l'origine de l'erreur
Et changer le driver pour MYSQL bien sur.

Et c'est plus simple avec les libs MYSQL : voir le lien donné récemment :
http://www.arcanthea.com/opensource/tutoriels/vcpp-mysql/vcpp-mysql-tut.pdf
Sylvain SF
Le #19702191
programmation a écrit :
Salut,

Je voudrais connecter à une base de données Mysql via ODBC à partir
d'un programme C sous Visual Studio 2008 Windows.



cela suppose d'avoir créé l'alias de connexion ODBC, l'as-tu fait ?
relire en cas de besoin.

comme suggéré, il est bcp plus efficace (voire simple car les erreurs
sont moins masquées) d'utiliser directement l'API mySQL.

le "connector/C++" est également une bonne alternative pour débuter

Sylvain.
marc
Le #19733671
programmation a écrit :
Salut,

Je voudrais connecter à une base de données Mysql via ODBC à partir
d'un programme C sous Visual Studio 2008 Windows.



comme les autres réponses (Msdn et mysqllib) et pour ODBC, active les
Traces ODBC et tu auras de suite la cause de l'erreur
programmation
Le #19754661
On 10 juil, 09:25, marc
programmation a écrit :

> Salut,

> Je voudraisconnecter à une base de données Mysql via ODBC à parti r> d'un programme Csous Visual Studio 2008 Windows.

comme les autres réponses (Msdn et mysqllib) et pour ODBC, active les
Traces ODBC et tu auras de suite la cause de l'erreur


programmation
Le #19754801
On 10 juil, 09:25, marc
programmation a écrit :

> Salut,

> Je voudraisconnecter à une base de données Mysql via ODBC à parti r> d'un programme Csous Visual Studio 2008 Windows.

comme les autres réponses (Msdn et mysqllib) et pour ODBC, active les
Traces ODBC et tu auras de suite la cause de l'erreur





Salut,

Après la compilation et l'exécution j'obtiens:

retcode = -1 // c'est la valeur de retour de SQLConnect
Erreur sur l'instruction SQLConnect Impossible de se connecter a la
source de donnees:
1. [

- Qu'est ce que signifie ce message d'erreur ?: 1. [
programmation
Le #19754791
On 4 juil, 21:07, domi
programmation wrote:
> Salut,

> Je voudraisconnecter à une base de données Mysql via ODBC à parti r> d'un programme Csous Visual Studio 2008 Windows.
> /....
> /....
> La fonction SQLConnect a echoue.

> J'ai pris cet exemple de lien suivant:
>http://melem....

> Comment ce problème de connexion va être résolue?

Eviter ce genre de lien (surtout ce site..)
et prends les nombreux exemples de Msdn, commehttp://support.microsoft.co m/kb/252699,
notamment pour la gestion d'erreurs , fonction HandleError pour savoir
l'origine de l'erreur
Et changer le driver pour MYSQL bien sur.

Et c'est plus simple avec les libs MYSQL : voir le lien donné récemme nt :http://www.arcanthea.com/opensource/tutoriels/vcpp-mysql/vcpp-mysql-t.. .





Salut,
Après la compilation et l'exécution j'obtiens:
retcode = -1 // c'est la valeur de retour de SQLConnect
Erreur sur l'instruction SQLConnect Impossible de se connecter a la
source de donnees:
1. [

- Qu'est ce que signifie ce message d'erreur ?: 1. [
domi
Le #19755531
programmation wrote:
On 4 juil, 21:07, domi


Après la compilation et l'exécution j'obtiens:
retcode = -1 // c'est la valeur de retour de SQLConnect
Erreur sur l'instruction SQLConnect Impossible de se connecter a la
source de donnees:
1. [

- Qu'est ce que signifie ce message d'erreur ?: 1. [



Apparemment tu n'as même pas utilisé HandleError !
domi
Le #19755521
programmation wrote:

comme les autres réponses (Msdn et mysqllib) et pour ODBC, active les
Traces ODBC et tu auras de suite la cause de l'erreur





Après la compilation et l'exécution j'obtiens:
retcode = -1 // c'est la valeur de retour de SQLConnect



Quel rapport avec l'activation des _Traces_ ODBC ?
programmation
Le #19755921
On 14 juil, 18:46, domi
programmation wrote:
> On 4 juil, 21:07, domi > Après la compilation et l'exécution j'obtiens:
> retcode = -1 // c'est la valeur de retour de SQLConnect
> Erreur sur l'instruction SQLConnect Impossible de se connecter a la
> source de donnees:
> 1. [

> - Qu'est ce que signifie ce message d'erreur ?:  1. [

Apparemment tu n'as même pas utilisé HandleError !



- Comment je vais utiliser HandleError ?

- J'ai utilisé la fonction SQLGetDiagField()

Voici mon code :
#include #include #include #include #include
#include #include #include

void sql_perror(SQLSMALLINT HandleType, SQLHANDLE Handle, const char *
title)
{
SQLCHAR s[SQL_MAX_MESSAGE_LENGTH];
SQLSMALLINT ligne = 1;

fprintf(stderr, "%s :n", title);

while (SQLGetDiagField(HandleType, Handle, ligne,
SQL_DIAG_MESSAGE_TEXT, s, sizeof(s), NULL) != SQL_NO_DATA)
{
fprintf(stderr, "%d. %sn", ligne, s);
ligne++;
}
}
void main()
{
SQLRETURN retcode;
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("erreurn");
// }

//}


// retcode = SQLConnect(hdbc,(SQLCHAR*)dsn, SQL_NTS,
(SQLCHAR*)uid, SQL_NTS,(SQLCHAR*)pwd, SQL_NTS);
retcode=SQLConnect(hdbc,(SQLCHAR *)"pays_dsn",SQL_NTS,(SQLCHAR
*)"root",SQL_NTS,(SQLCHAR *)"",SQL_NTS);
printf("retcode=%d",retcode);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
printf("n%s","vrai");
else
{
printf("nErreur sur l'instruction SQLConnect ");
sql_perror(SQL_HANDLE_DBC, hdbc, "Impossible de se connecter a la
source de donnees");
}
}
domi
Le #19756161
programmation wrote:
On 14 juil, 18:46, domi
programmation wrote:
On 4 juil, 21:07, domi Après la compilation et l'exécution j'obtiens:
retcode = -1 // c'est la valeur de retour de SQLConnect
Erreur sur l'instruction SQLConnect Impossible de se connecter a la
source de donnees:
1. [
- Qu'est ce que signifie ce message d'erreur ?: 1. [


Apparemment tu n'as même pas utilisé HandleError !



- Comment je vais utiliser HandleError ?



Comme dans l'exemple de Microsoft :

if (nstatus != SQL_SUCCESS && nstatus != SQL_SUCCESS_WITH_INFO)
{
HandleError(hdbc,SQL_HANDLE_STMT,nstatus);
return;
}

et ça doit donner un libellé plus précis, non ?

Et comme avait dit Marc, active les traces ODBC pour voir les détails
Publicité
Poster une réponse
Anonyme