begin process at 2012 05 28 22:31:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Base de données

 > 

Autre

 > 

Connexion à une base oracle via programme C ou C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Connexion à une base oracle via programme C ou C++

mardi 6 février 2007 à 15:40:04 | Connexion à une base oracle via programme C ou C++

LaTatadu91

Bonjour a tous,

Alors voila,je cherche un moyen d'attaquer une base oracle a partir d'un petit programme simple qui
me permettra de faire des INSERT et autre requetes SQl tres simples

je suis sous windows ;ma base oracle est v10.g;et je travaille sous visual studio 2005.

Apres quelques recherches j'ai trouver une librairie "oci "
malheureusement cela ne fonctionne pas.
Quandje lance mon programme ca plante au niveau de l'environnement
juste avant de faire laconnexion....

je sais pas si vous vous y connaissez, mais je ne trouve quasi aucune doc
et je planche dessus depuis plusieurs heures sans trouver de moyen de m'en sortir

pourriez vous SVP m'aidez...

voici mon bout de code test pr ma connexion:

#include<stdlib.h>

#include

<iostream>

#include

<conio.h>

#include

<occi.h>

using

namespace oracle::occi;

using

namespace std;

int

main ( int argc, char * argv[])

{

// Fetch our required environment variable values. The program

// will exit if one of these can't be obtained.

//

const string user = "orafce" ;

const string pass = "orafce" ;

const string osid = "orafce" ;

// Establish the Oracle client environment. Allows the Oracle

// libraries to allocate memory, initialize data structures, etc.

//

Environment*

const env = Environment::createEnvironment(

Environment::DEFAULT);

// Open a connection to the database, then close it.

//

int ret = 0;

try

{

Connection*

const con = env->createConnection(user, pass, osid);

cout <<

"Connected as " << user << "@" << osid << "." << endl;

//list_visible_tables ( con,user,osid);

displayAllRows(con);

cout <<

"Closing connection." << endl;

env->terminateConnection(con);

}

catch

(SQLException ea)

{

// We couldn't connect. what() will give us the Oracle error

// code and message, so we can troubleshoot the issue.

//

cerr <<

"Can't connect: " << ea.what();

ret = 1;

}

// Cleanup the environment. It is a very good idea to let Oracle

// cleanup before your program terminates.

//

Environment::terminateEnvironment(env);

//while(!kbhit()); // exit condition !! get char CTRL C

return ret;

}


et voici l'erreur quis 'affiche lors du lancement

First-chance exception at 0x612f89e9 in sgbd-sample.exe: 0xC0000005: Access violation reading location 0x6661726f.

Unhandled exception at 0x612f89e9 in sgbd-sample.exe: 0xC0000005: Access violation reading location 0x6661726f.

The program '[1540] sgbd-sample.exe: Native' has exited with code 0 (0x0).


Je suis débutant merci pr votre aide !!!

 

mercredi 7 février 2007 à 01:05:31 | Re : Connexion à une base oracle via programme C ou C++

BruNews

Administrateur CodeS-SourceS
Sous Windows on utilise ODBC ou ADO (je conseille ADO pour sa simplicité).
J'ai fait plusieurs exemples avec l'un et l'autre, s'y référer.
Le format de la chaine de connexion est ici (prendre OLE DB):
[ Lien ]

Les biblis exotiques sont à proscrire. La prog des bases de données en code natif ne me semble pas non plus indiquée pour un débutant pour cause de pointeur d'interface COM et autres joyeusetés de ce genre.

ciao...
BruNews, MVP VC++
mercredi 7 février 2007 à 09:43:05 | Re : Connexion à une base oracle via programme C ou C++

LaTatadu91

Ok merci pour ta réponse, je vais donc poursuivre mes recherches sur ADO voir ODBC
Pour cette bibli "exotique" elle m'a été conseillée par les gens de chez Oracle( voir leur site)

Si je rencontre un probleme je te recontacte , merci encore!


 

mercredi 7 février 2007 à 11:30:38 | Re : Connexion à une base oracle via programme C ou C++

LaTatadu91

Salut,*
Je n'arrive pas a trouver d'exemple simple et basique de connection a oracle via ADO
ecrit en C .

Pourrez tu m'en donner un , un simple qui effectue seulement la connexion a oracle puis un select ou autre requete basique???

je te remercie d'avance pr ton aide

 

mercredi 7 février 2007 à 15:13:40 | Re : Connexion à une base oracle via programme C ou C++

LaTatadu91

Salut voila ce que j'ai fait apres une petite recherche
le code compile sans erreur mais il ne retourne rien...

lors du SELECT rien ne s'affiche ensuite !!!

#include

<iostream>

#include

<stdio.h>

#import

"C:\Program Files\Common files\System\ado\msado15.dll" \

no_namespace rename(

"EOF","ADOEOF")

void

main()

{

//initialise les variables

HRESULT hr;

CoInitialize(NULL);

try

{

//declare la connection

_ConnectionPtr connection;

hr = connection.CreateInstance(

__uuidof(Connection));

//vérifie si réussite

if (FAILED(hr))

{

throw _com_error(hr);

}

//declare le recordset

_RecordsetPtr recordset;

hr = recordset.CreateInstance(

__uuidof(Recordset));

//verifie si reussite

if (FAILED(hr))

{

throw _com_error(hr);

}

//établi la connection

connection->CursorLocation = adUseClient;

connection->Open(

"Provider=OraOLEDB.Oracle;Data Source=orafce;User Id=orafce;Password=orafce;", L"",L"", adConnectUnspecified);

//va chercher les éléments

recordset->Open(

"SELECT * from STOPPAGE",

connection.GetInterfacePtr(),

adOpenForwardOnly, adLockReadOnly,

adCmdText);

//les affichent

while(!recordset->ADOEOF)

{

_variant_t var;

var = recordset->Fields->GetItem(L

"TIME_END")->GetValue();

std::cout <<

static_cast<char *>(_bstr_t(var.bstrVal))<< std::endl;

recordset->MoveNext();

};

//referme le recordset

recordset->Close();

}

catch(_com_error &e)

{

std::cout <<

"planté";

}

catch(...)

{

std::cout <<

"planté";

};

}

Donc voila je ne vois pas en quoi ca ne marche pas pourquoi est ce que ca se connecte pas?
peut etre une erreur dans mon choix de connexion string??????

merci de m'aider

 

mercredi 7 mars 2007 à 11:25:21 | Re : Connexion à une base oracle via programme C ou C++

BruNews

Administrateur CodeS-SourceS

Gaffe de ne pas mixer ANSI et UNICODE dans ton projet.

recordset->Fields->GetItem(L"TIME_END")->Value();
L'emploi direct de l'index est prérable pour les perfs, il n'y aura pas de reherche de la position du champ.
recordset->Fields->GetItem((long) IndexIci)->Value();

Reprends EXACT la syntaxe de mes exemples, tu seras ainsi certain que le problème ne viendra pas de là.

ciao...
BruNews, MVP VC++

mercredi 7 mars 2007 à 11:30:33 | Re : Connexion à une base oracle via programme C ou C++

annaquin

Tu devrais aussi ne pas ecouter n'importe qui.

utilises OCCI et ne part pas dans les facilites ODBC ... Ton premier probleme vient qu'il ne connait pas ORA_HOME. Comme il a besoin du tnsname, il faut que ORA_HOME pointe sur le repertoire d'installation de ton driver oracle.

ciao
jeudi 22 novembre 2007 à 16:29:09 | Re : Connexion à une base oracle via programme C ou C++

exar

Membre Club
Hello,

Il y a aussi Pro*C/C++ (précompilateur C/C++ d'Oracle) qui fonctionne très très bien !  Surtout si ce n'est que pour quelques petits select ou insert...
Bon amusement !


Cette discussion est classée dans : base, programme, const, oracle, environment


Répondre à ce message

Sujets en rapport avec ce message

Liens entre 2 tables sous Base Oracle [ par Charly06 ] Bonjour ma question est la suivante : Comment créer un lien entre 2 tables, sachant que je suis sous Oracle. D'avance merci base de registre... [ par morgandetoi06 ] svp pouvez vous me donner la synyaxe EXACTE d une fonction pour ecrire une clef dans la base de registre dans HKEY_CURRENT_USER\SOFTWARE\Microsoft\Win utlité des registres [ par glipper ] Bonjour,J'aimerais savoir dans quel genre de cas il est utile d'utiliser la base des registres. Peut-on creer des clés juste afin qu'elles contiennent Connexion ODBC pour base Oracle en C/C++ [ par mista ] mistaBonjour,Debutante en panique, je dois creer un programme win32 console, sous vc++6, NT : qui me permettent de me connecter à une base de données faire un commit pour base oracle via VC++ [ par sisteroots ] sisterootsBonsoir à tous, j'espere qu'a cette heure qq un pourra me venir en aide...Je travaille sur un programme d'integration de données de fichiers Oracle OCI ou fichier ? [ par PunkDude424 ] salut, je voudrais faire un programme et avoir la possibilité qu'il sois billingue, alors je me demandais se que j'était mieux de faire, mon programme Un débutant qui veut apprendre! [ par skunsky ] Bonjour à tous,Je voux explique mon probleme: Je voudrais creer un petit programme avec une interface graphique (faite avec c++ builder) qui me permet base d edonnee / probleme si un champs est vide [ par callaghan1981 ] Please il y aurai un gentil admin qui pourrai ;e proposer une solution?? mon programme se connecte a une base de donnee... tt est parfais,.. mon prog Oracle et C++ [ par fluminis ] Bonjour à tousJe recherche comment on peut se connecter en C++ a un base de donnees Oracle.J'arrive bien a utiliser MySql avec les api c qui sont dist Trouver <mysql.h> [ par lolo007 ] Bonjour a tousDans le cadre d'un projet, je dois réaliser la lecture dans un automate grâce à un serveur OPC puis, ce que j'ai lue, je dois le mettre


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,265 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales