CLASSE DE CONNEXION ORACLE

cs_ousta Messages postés 95 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 2 juin 2007 - 26 août 2004 à 16:20
Yannikator Messages postés 23 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 10 novembre 2012 - 10 nov. 2012 à 14:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/25671-classe-de-connexion-oracle

Yannikator Messages postés 23 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 10 novembre 2012
10 nov. 2012 à 14:54
Salut,

Je ne pense pas qu'on parle de la même chose. ^^
Je ne parle pas des erreurs SQL. Je parle de la gestion des transactions. Elles ne sont pas gérés dans cette class, se qui est problématique dans le cas où tu fais plusieurs requêtes en base et que tu as besoin qu'elles soient toutes validées (sans erreur) avant de confirmer l'opération en base (COMMIT). De plus cela te permet de gérer les locks etc...!

Je vous invite (à toi et aux autres) à regarder ceci :
http://morpheus.developpez.com/oracledotnet/
http://www.tuto-dba-oracle.com/gestion-transactions-oracle.html

et plus si affinité... ^^
cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 1
30 oct. 2012 à 11:48
Non ce n'est certainement pas en automatique : à proscrire.
De mémoire je le gérais dans le retour :

if(bResultat)
{
...
}
Yannikator Messages postés 23 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 10 novembre 2012
30 oct. 2012 à 11:31
Salut,

J'ai une remarque qui me semble importante à faire à propos de cette jolie class ^^.
Comment gère tu le commit et le rollback? Est-ce que les données sont automatiquement validées lorsque que tu fais un Insert dans ta base? (PAS BON CA...)

A+
cs_DPhBxl Messages postés 19 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 21 juin 2011
15 oct. 2010 à 18:44
Bonjour,

En ouvrant le code en tant que solution "using System.Data.OracleClient;" est reconnu mais lorsque j'insère ce code en tant que classe dans la solution, il ne connait pas "OracleClient".
Pourquoi ?

Merci.
cs_franz Messages postés 12 Date d'inscription jeudi 27 décembre 2001 Statut Membre Dernière intervention 29 avril 2008
23 sept. 2010 à 12:10
J'ai aussi eu le problème de l'exception lors de la récupération ; je suis sous VS 2008, c'est sans doute du à cela.
Je l'ai résolu comme ça en utilisaant un tableau d'objets de récupération de résultat à 1 dimension, qui contient lui aussi un tableau d'objets :

--> dans la classe :

public Object[] getQueryResult(string sQuery)
{
.....

Object[] oArrResult;
.....
oArrResult = new Object[this.iNbRows];

// Remplissage du tableau de retour
try
{
this.oracleReader = this.oracleCmd.ExecuteReader();
int i = 0;
while (this.oracleReader.Read())
{
object[] hop = new object[iNbCols];
for (int j = 0; j < this.iNbCols; j++)
{
hop[j] = oracleReader.GetOracleValue(j);
}
oArrResult[i]=hop;
i++;
}
....

--> dans le code de récup du résultat :

object[] resultat = this.monOracle.getQueryResult(sQuery);

this.monOracle.deconnect();

// Utilisation pour remplir un combobox par exemple avec MonChamp
foreach (object[] monRow in resultat)
{
this.listBox1.Items.Add(monRow[0].ToString());
//this.cbMonComboBox.Items.Add(monRow[0].ToString());
}

A part ça, très bon code, merci ;)
Greyhunter Messages postés 2 Date d'inscription mardi 12 octobre 2010 Statut Membre Dernière intervention 12 octobre 2010
15 juin 2009 à 14:09
excellent classe! j'ai juste un pb avec la récupération de données!

en fait j'ai justement besoin d'insérer mes rows dans un textbox, donc je parcours résultat avec un foreach (comme dans ton exemple avec object[] monRow) et je chope une exception.

foreach (Object[] monRow in resultat)
                {
                    traitement.Text += monRow[0].ToString() + " - " + monRow[1].ToString() + " - " + monRow[2].ToString() + " - " + monRow[3].ToString() + " - " + monRow[4].ToString() + "\r\n\r\n";
                }


l'excepetion est la suivante:
Impossible d'effectuer un cast d'un objet de type 'System.Data.OracleClient.OracleNumber' en type 'System.Object[]'.

aurais-tu une suggestion?
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
4 févr. 2008 à 11:14
Hm je suis un peu perdu :s
#############
C'est un tableau à deux dimensions.Chaque row de ta requête est un tableau et l'ensemble est stocké dans un tableau.
#############

ça je suis daccord :)

apres la récupération du résultat j y arrive pas..
cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 1
4 févr. 2008 à 10:47
C'est un tableau à deux dimensions.
Chaque row de ta requête est un tableau et l'ensemble est stocké dans un tableau.

Donc tu peux récupérer tes lignes de cette façon par exemple :
foreach(object[] monRow in resultat)
{
this.cbMonComboBox.Items.Add(monRow[0].ToString());
}

resultat correspond ici à oArrResult, c'est ton tableau à deux dimensions. Pour chaque tableau (row) de ton résultat, tu récupère le champ que tu veux.
Par exemple si tu veux récupérer le 1er champ de ton SELECT ça sera monRow[0], qui sera de type object donc n'oublie pas de le transformer en string par exmple avec ToString()
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
4 févr. 2008 à 10:40
ok merci :)
et dans ce code :
while (this.oracleReader.Read())
{
for (int j = 0; j < this.iNbCols; j++)
{
oArrResult[i, j] = oracleReader.GetOracleValue(j);
}
i++;
}
on stocke le résultat de notre requete dans notre objet oArrResult, mais comment peut-on utiliser cette objet ensuite?
cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 1
4 févr. 2008 à 10:17
La variable sQuery contient ta requête SQL, qui est passée à ton objet Oracle via la fonction getQueryResult et le résultat de ta requête se trouve dans la variable resultat.
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
4 févr. 2008 à 10:14
hm ouai j'ai vu ce code, il est en commentaire dans l'exemple, ce que je comprend pas c'est que dans le code on renseigne déja l'user, le passwd et la base, mais pas la requête SQL, c'est pour cela que je ne comprend pas :s
cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 1
4 févr. 2008 à 09:57
Tu fais dans ce style là :

classOracle monOracle = new classOracle();
monOracle.setUser("Toto");
monOracle.setPassword("mdp");
monOracle.setBase("maBase");

if(this.monObjetOracle.connect())
{
string sQuery="SELECT MonChamp FROM MaTable";
object[,] resultat = this.monOracle.getQueryResult(sQuery);
this.monOracle.deconnect();

// Utilisation pour remplir un combobox par exemple avec MonChamp
foreach(object[] monRow in resultat)
{
this.cbMonComboBox.Items.Add(monRow[0].ToString());
}
}
cs_jonathanC Messages postés 17 Date d'inscription mardi 29 janvier 2008 Statut Membre Dernière intervention 8 février 2008
4 févr. 2008 à 09:51
Bonjour,

je ne souhaite utiliser que la partie " select ",et j'aurais 2 questions:
- où est-ce que l'ont ecrit la requête SQL?
- comment utilise-t-on le résultat avec l'objet retourné?
shervy Messages postés 62 Date d'inscription lundi 24 décembre 2001 Statut Membre Dernière intervention 15 octobre 2007
3 juil. 2007 à 16:26
Une didée qui me vient comme çà... sans aucune garantie !!!
Essaye de remplacer :

this.oracleCnx.ConnectionString = "Password=" + this.sPassword + ";User ID=" + this.sUser + ";Data Source=" + this.sBase;

par :

sServeur = "MonServeur";
this.oracleCnx.ConnectionString = "Password=" + this.sPassword + ";User ID=" + this.sUser + ";Data Source=" + this.sBase + ";Server=" + sServeur;
JuLsupinfo Messages postés 11 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 21 novembre 2007
3 juil. 2007 à 14:10
Salut, belle classe en effet, mais quelqu'un pourrait-il me dire comment faire pour se connecter à une base Oracle sur un serveur distant ? Car nul part tu n'indique d'adresse de serveur ou de nom de serveur, juste la base et login + pass.
Merci d'avance.
cs_Likilik Messages postés 9 Date d'inscription jeudi 2 décembre 2004 Statut Membre Dernière intervention 24 avril 2006
24 avril 2006 à 12:56
J'ai regardé, en effet le code erreur renvoyé par Oracle est PLS-00201 qui est effectivement un problème de droits d'utilisateur à priori.
Je regarde et je vous tiens informé.
Merci encore.
shervy Messages postés 62 Date d'inscription lundi 24 décembre 2001 Statut Membre Dernière intervention 15 octobre 2007
24 avril 2006 à 08:55
Autre remarque, la compilation avec C# Express fonctionne parfaitement. Il y a juste deux avertissements mais rien de bien méchant à corriger.
Vraiment un code parfait :))
shervy Messages postés 62 Date d'inscription lundi 24 décembre 2001 Statut Membre Dernière intervention 15 octobre 2007
24 avril 2006 à 08:53
Cela ressemeble fort à un problème de droits...
Es-tu sûr que le user à les droits d'exécution sur ta procédure ? Car le fait de la voir n'est pas suffisant.
cs_Likilik Messages postés 9 Date d'inscription jeudi 2 décembre 2004 Statut Membre Dernière intervention 24 avril 2006
22 avril 2006 à 04:17
Ce code est clair et bien fait !
Par contre je rencontre un petit problème lors de l'exécution d'une procédure stockée avec paramètres.
Il me renvoie un message : la procédure doit être déclarée.
Or la procédure est présente lorsque je consulte le contenu de la base avec l'explorateur de serveur de VS 2003.
Une idée ?
Je sais que ca reste floue mais si ca interesse j'envoie la portion de code que j'ai tapé.
Merci
red_rocks Messages postés 1 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 4 février 2006
4 févr. 2006 à 13:10
Salut! Je rejoins LAMB pour savoir si quelqu'un aurait une idée pour faire fonctionner ce code en C++??
Merci d'avance !
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
7 juin 2005 à 11:04
J'en ai enlevé une :)
cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 1
7 juin 2005 à 09:11
Deux félicitations d'un coup, ma foi je n'en mérite pas tant ! :o)

Merci en tout cas !
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
6 juin 2005 à 23:26
Je félicite les commentaires de codes :)

Cela devient rare de nos jours !
sphaxslayer Messages postés 216 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 17 septembre 2008
26 avril 2005 à 14:49
Excellente, ça m'a beaucoup aidé! c'est très clair et parfaitement commenté, le code est aéré donc bien lisible...nickel! :)
merci encore
cs_Lamb Messages postés 3 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 24 janvier 2005
24 janv. 2005 à 20:15
onjour,

je viens de découvrir cette petite classe qui m'a l'air bien pratique. Le problème, c'est qu'il s'agit de C#. Quelqu'un aurait une idée de comment la faire fonctionner en C++ ?

Quelles adaptations faudrait il faire ? Auriez vous quelques pistes ou sources à m'indiquer ?

Merci par avance !
cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 1
31 août 2004 à 09:25
Oracle.Net n'est pas obligatoire si vous avez installé Visual Studio 2003 et le framework 1.1 !

Merci pour tous ces encouragements ...
shervy Messages postés 62 Date d'inscription lundi 24 décembre 2001 Statut Membre Dernière intervention 15 octobre 2007
31 août 2004 à 09:23
Bizarre, il me semblait être connecter avant de poster la news précédente ?!?
Ah oui... autre chose...
Ne faudrait-il pas télécharger un petit truc genre Oracle.Net :

http://www.microsoft.com/downloads/details.aspx?FamilyID=4f55d429-17dc-45ea-bfb3-076d1c052524&displaylang=fr
shervy Messages postés 62 Date d'inscription lundi 24 décembre 2001 Statut Membre Dernière intervention 15 octobre 2007
31 août 2004 à 09:05
Franchement beau travail mec...
Enfin une source qui va permettre d'utiliser autre chose que SQLserver !!!
Continue comme çà...
cs_ousta Messages postés 95 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 2 juin 2007
26 août 2004 à 16:20
Beau travail je naurais qu 'une phrase a rajouter vive sqlserver ^^