Accueil > Forum > > > > Connection base de données sql server via ODBC en C
Connection base de données sql server via ODBC en C
mercredi 8 juin 2011 à 10:01:32 |
Connection base de données sql server via ODBC en C

Kizera
|
Bonjour, j'ai un programme qui me permet de me connecter à une base sql server mais le problème c'est qu'il me manque 1 champ à compléter et que je ne sais pas à quoi il correspond.
Voici mon code :
Code C/C++ :
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define MAIN_LEN 80
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
using namespace std;
void main ()
{
SQLRETURN retcode;
SQLCHAR COL2[MAIN_LEN+1];
// Exemple de requete
char requete[1024+1]="SELECT * FROM TABLE_TEST";
char Serveur[MAIN_LEN+1]="";
char Login[MAIN_LEN+1]="USER-TEST";
char Pwd[MAIN_LEN+1]="azerty__00";
// Connexion à la base de données
retcode=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3,0);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
else
{
printf("Erreur sur l'instruction SQLAllocHandle1 !\n");
}
// Vérification du Lien ODBC, Login Et Pwd
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLConnect(hdbc, (SQLCHAR*)Serveur, SQL_NTS, (SQLCHAR*)Login, SQL_NTS, (SQLCHAR*)Pwd, SQL_NTS);
else
{
printf("Erreur sur l'instruction SQLSetEnvAttr !\n");
}
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
else
{
printf("Erreur sur l'instruction SQLConnect !\n");
cout<<"ret :"<<retcode<<"\n";
}
// Execution de la requete
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLExecDirect(hstmt, (SQLCHAR*)requete, SQL_NTS);
else
{
printf("Erreur sur l'instruction SQLAllocHandle2 !\n");
cout<<"ret :"<<retcode<<"\n";
}
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
while (TRUE)
{
retcode = SQLFetch(hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
SQLGetData(hstmt, 2,SQL_C_CHAR, COL2, sizeof(COL2),NULL);
cout<<"col2 :"<<COL2<<"\n";
}
}
}
// Déconnexion
SQLFreeStmt(hstmt, SQL_DROP);
SQLDisconnect(hdbc);
SQLFreeConnect(hdbc);
getchar ();
}
Si vous regardez bien j'ai un champ vide a la ligne 25 : "char Serveur[MAIN_LEN+1]="";
Mais à quoi correspond ce champ ?? que dois-je lui mettre dedans. Merci d'avance pour vos réponses.
|
|
mercredi 8 juin 2011 à 10:26:15 |
Re : Connection base de données sql server via ODBC en C

BruNews
|
Réponse acceptée !
Code C/C++ : char szCONNECT[] = "Driver={SQL Server};Server=.\\NOMDUSERVEUR;Database=BNTESTS;"
"Trusted_Connection=yes;Uid=BruNews;Pwd=TonMotDePasse";
char szSQL[] = "SELECT fldA FROM BLKA";
char szappname[] = "blkAdd";
SQLHANDLE henv = 0, hconn = 0;
int bnConnectDB()
{
if(SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv) & 0xFFFE) return 0;
if(SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER) 3, SQL_IS_INTEGER) & 0xFFFE) goto sqlFREEENV;
if(SQLAllocHandle(SQL_HANDLE_DBC, henv, &hconn) & 0xFFFE) goto sqlFREEENV;
if(SQLDriverConnect(hconn, 0, szCONNECT, SQL_NTS, 0, 0, 0, SQL_DRIVER_NOPROMPT) & 0xFFFE) goto sqlFREEHDBC;
return 1;
sqlFREEHDBC: SQLFreeHandle(SQL_HANDLE_DBC, hconn);
sqlFREEENV: SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
void bnDisconnectDB()
{
SQLDisconnect(hconn);
SQLFreeHandle(SQL_HANDLE_DBC, hconn);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
ciao...
BruNews, MVP VC++
|
|
mercredi 8 juin 2011 à 10:40:26 |
Re : Connection base de données sql server via ODBC en C

Kizera
|
Hmmm merci beaucoup pour avoir répondu mais j'ai un souci c'est que le "nom du serveur" je ne sais pas où le trouver.. En fait je suis en stage là j'ai déjà développé un bench simplifié puis la il faut que je me connecte à une base sql server pour récupérer quelques millions de lignes et en fait on m'a envoyé par mail des logs/pass/nom de machine/nom de bases pour pouvoir m'y connecter et donc je n'ai pas vraiment d'adresse IP ou encore un nom de serveur précis.. donc voila si tu pouvais juste prendre le temps de me répondre par écrit cette fois x) Merci d'avance.
|
|
mercredi 8 juin 2011 à 10:54:36 |
Re : Connection base de données sql server via ODBC en C

BruNews
|
Si ta base est en local sur ton poste tu mets direct le nom d'instance SqlServer à laquelle tu dois te connecter.
SQLGetData() et autres à oublier pour aspirer des millions de lignes.
Préparer un vecteur de structures en mémoire, mapper les champs (1 seule fois) par SQLBindCol() en mode SQL_BINARY et aspirer par passes avec SQLFetchScroll(). Ainsi les perfs seront au RDV.
ciao...
BruNews, MVP VC++
|
|
mercredi 8 juin 2011 à 11:18:22 |
Re : Connection base de données sql server via ODBC en C

Kizera
|
ahh ok, la base n'est pas sur mon poste, elle est sur un poste distant dont j'ai l'adresse local mais même si lui passe comme lien ODBC cela ne fonctionne toujours pas lorsque j'exécute mon programme il m'affiche :
"Erreur sur l'instruction SQLConnect !"
ret = -1
"Erreur sur l'instruction SQLAllocHandle !"
ret = -1
Pour SQLAllocHandle je penses que si l'erreur du SQLConnect est réparé, ce sera de même pour SQLAllocHandle.
Merci de bien vouloir répondre une derniere fois surement  .
|
|
mercredi 8 juin 2011 à 11:33:39 |
Re : Connection base de données sql server via ODBC en C

Kizera
|
En fait je viens de remarquer une erreur... Si on regarde bien mon programme les printf dans les else sont un peu dispatché en fait... Lorsque dans le if de SQLConnect il échoue il va passer dans le else et m'afficher "Erreur de l'instruction SQL SQLSetEnvAttr !" en fait je viens de voir que ma fonction SQLConnect à l'air de bien marcher mais ce sont : Code C/C++ : if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
else
{
printf("Erreur sur l'instruction SQLAllocHandle !\n");
cout<<"ret :"<<retcode<<"\n";
}
// Execution de la requete
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLExecDirect(hstmt, (SQLCHAR*)requete, SQL_NTS);
else
{
printf("Erreur sur l'instruction SQLExecDirect !\n");
cout<<"ret :"<<retcode<<"\n";
}
Voila ce sont en fait ces 2 fonctions qui plantes ! et qui me retourne un retcode = -1.
PS : Je n'ai pas trouver la fonction éditer ou supprimer pour mon ancien message... Désolé et merci d'avance ;).
|
|
mercredi 8 juin 2011 à 12:32:00 |
Re : Connection base de données sql server via ODBC en C

BruNews
|
pourquoi n'utilises-tu pas les fonctions que je mets ???
ça éviterait ces 'if' qui trainent en longueur et qui conduisent aux erreurs.
ciao...
BruNews, MVP VC++
|
|
mercredi 8 juin 2011 à 12:38:28 |
Re : Connection base de données sql server via ODBC en C

Kizera
|
Ben je vais essayer tiens ^^ j'avais du mal à comprendre mais là en quelques heures de recherche j'en ai vu des tas similaires donc sa va. Je vais essayer mais maintenant je sais exactement d'où vient mon problème vu que j'ai découvert la fonction : SQLGetDiagRec() elle est super  en tout cas merci pour tout ;) et il faudrais mettre le sujet en "résolu" si vous avez ^^ je n'ai pas trouver la commance non plus bref bonne journée ;) merci encore.
|
|
Cette discussion est classée dans : sql, include, main, retcode, success
Répondre à ce message
Sujets en rapport avec ce message
Problème du connexion à BD Mysql dans un programme C [ par boualiasma ]
Salut, - J'ai décidé de travailler avec easyphp puisque plus facile à créer des bases des données par rapport au Mysql server via lignes des commandes
probleme de connexion odbc [ par neofenix ]
salut tout le monde voila j'ai recupéré un code de connnexion odbc sur cppfrance mais le probleme c'est que je n'arrive pas a me connecter a ma base d
connecter au Mysql via ODBC à partir d'un programme C sous Visual Studio 2008 Windows. [ par boualiasma ]
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 (
pb d'augmentation de memoire avec connexion SQL [ par cassiopee88 ]
Alors voila je vous explique mon problème : j'ai ecrit un programme en C qui suite à certain evenement envoi une requete SQL. Tous marche correctement
Connexion ODBC avec SQLConnect [ par gagaet22 ]
Bonjour à tous et bonne année!!!! Et la santé aussi (quand la santé va tout va !!!)Voila, je suis en train de decouvrir ODBC avec mes petits moyens. M
mysql ODBC et augmentation de mémoire... [ par cassiopee88 ]
Alors voila je vous explique mon problème : j'ai ecrit un programme en C qui suite à certain evenement envoi une requete SQL. Tous marche correctement
g++ & openGL [ par EricLeRouge ]
j'ai un gros soucis de compilation de fichiers en c++ avec openGL.En C tout se passe tres bien, mais en C++, rien ne va plus, expliquez moi pk voici l
C++ VS Mysql [ par ours_aquatique ]
Bonjour ,Aprés une semaine de recherche infructueuse , j'ai toujours le probleme suivant:je compile sous devC++ j utilise Mysql (V4.et des poussieres)
probleme de connection [ par MadMatt ]
Bonjour à tousJe voudrais ouvrir une base de données en C++ sous Linux (redhat 8) et avec KDevelop.Pour se faire, il faut que j'utilise les fonctions
inclure un .c ou .h [ par thebadskull ]
Voilà je suis entrain de faire un programme qui est assez long et donc j'aimerais séparer mes fonctions dans differents fichiers par exemple fichier1.
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|