Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

16 réponses
Avatar
programmation
Salut,

Je voudrais connecter =E0 une base de donn=E9es Mysql via ODBC =E0 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).\n");
else
{
if ( !SQL_SUCCEEDED(SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION,
(void *)SQL_OV_ODBC3, 0)) )
fprintf(stderr, "La fonction SQLSetEnvAttr a echoue.\n");
else
{
SQLHDBC con;

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

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.
\n");
else
{
SQLHSTMT stmt;

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

printf("PAYS > CAPITALE\n\n");

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\n", pays,
capitale);
}
}

SQLFreeHandle(SQL_HANDLE_STMT, stmt);
}

SQLDisconnect(con);
}

SQLFreeHandle(SQL_HANDLE_DBC, con);
}
}

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

Apr=E8s la compilation et l'ex=E9cution 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=E8me de connexion va =EAtre r=E9solue?

SVP, j'ai besoin de vos aides.

10 réponses

1 2
Avatar
domi
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
Avatar
Sylvain SF
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 <http://dev.mysql.com/doc/refman/5.1/en/connector-odbc.html>
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
<http://dev.mysql.com/doc/refman/5.1/en/connector-cpp.html>

Sylvain.
Avatar
marc
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
Avatar
programmation
On 10 juil, 09:25, marc wrote:
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


Avatar
programmation
On 10 juil, 09:25, marc wrote:
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. [
Avatar
programmation
On 4 juil, 21:07, domi wrote:
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. [
Avatar
domi
programmation wrote:
On 4 juil, 21:07, domi wrote:



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 !
Avatar
domi
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 ?
Avatar
programmation
On 14 juil, 18:46, domi wrote:
programmation wrote:
> On 4 juil, 21:07, domi wrote:
> 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 <windows.h>
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
#include<string.h>

#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>


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");
}
}
Avatar
domi
programmation wrote:
On 14 juil, 18:46, domi wrote:
programmation wrote:
On 4 juil, 21:07, domi wrote:
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
1 2