cs_ousta
Messages postés95Date d'inscriptionmardi 15 juin 2004StatutMembreDernière intervention 2 juin 2007
-
26 août 2004 à 16:20
Yannikator
Messages postés23Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention10 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.
Yannikator
Messages postés23Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention10 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...!
cs_JuS
Messages postés121Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention20 mars 20091 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és23Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention10 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és19Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention21 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és12Date d'inscriptionjeudi 27 décembre 2001StatutMembreDernière intervention29 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++;
}
....
// 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és2Date d'inscriptionmardi 12 octobre 2010StatutMembreDernière intervention12 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.
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és17Date d'inscriptionmardi 29 janvier 2008StatutMembreDerniè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és121Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention20 mars 20091 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és17Date d'inscriptionmardi 29 janvier 2008StatutMembreDerniè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és121Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention20 mars 20091 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és17Date d'inscriptionmardi 29 janvier 2008StatutMembreDerniè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és121Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention20 mars 20091 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");
// 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és17Date d'inscriptionmardi 29 janvier 2008StatutMembreDerniè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és62Date d'inscriptionlundi 24 décembre 2001StatutMembreDernière intervention15 octobre 2007 3 juil. 2007 à 16:26
Une didée qui me vient comme çà... sans aucune garantie !!!
Essaye de remplacer :
JuLsupinfo
Messages postés11Date d'inscriptionmardi 24 février 2004StatutMembreDernière intervention21 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és9Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention24 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és62Date d'inscriptionlundi 24 décembre 2001StatutMembreDernière intervention15 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és62Date d'inscriptionlundi 24 décembre 2001StatutMembreDernière intervention15 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és9Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention24 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és1Date d'inscriptionjeudi 2 février 2006StatutMembreDerniè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és2367Date d'inscriptionmardi 17 avril 2001StatutMembreDernière intervention26 décembre 200723 7 juin 2005 à 11:04
J'en ai enlevé une :)
cs_JuS
Messages postés121Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention20 mars 20091 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és2367Date d'inscriptionmardi 17 avril 2001StatutMembreDernière intervention26 décembre 200723 6 juin 2005 à 23:26
Je félicite les commentaires de codes :)
Cela devient rare de nos jours !
sphaxslayer
Messages postés216Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention17 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és3Date d'inscriptiondimanche 16 janvier 2005StatutMembreDernière intervention24 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és121Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention20 mars 20091 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és62Date d'inscriptionlundi 24 décembre 2001StatutMembreDernière intervention15 octobre 2007 31 août 2004 à 09:23
Bizarre, il me semblait être connecter avant de poster la news précédente ?!?
10 nov. 2012 à 14:54
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é... ^^
30 oct. 2012 à 11:48
De mémoire je le gérais dans le retour :
if(bResultat)
{
...
}
30 oct. 2012 à 11:31
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+
15 oct. 2010 à 18:44
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.
23 sept. 2010 à 12:10
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 ;)
15 juin 2009 à 14:09
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.
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?
4 févr. 2008 à 11:14
#############
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..
4 févr. 2008 à 10:47
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()
4 févr. 2008 à 10:40
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?
4 févr. 2008 à 10:17
4 févr. 2008 à 10:14
4 févr. 2008 à 09:57
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());
}
}
4 févr. 2008 à 09:51
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é?
3 juil. 2007 à 16:26
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;
3 juil. 2007 à 14:10
Merci d'avance.
24 avril 2006 à 12:56
Je regarde et je vous tiens informé.
Merci encore.
24 avril 2006 à 08:55
Vraiment un code parfait :))
24 avril 2006 à 08:53
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.
22 avril 2006 à 04:17
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
4 févr. 2006 à 13:10
Merci d'avance !
7 juin 2005 à 11:04
7 juin 2005 à 09:11
Merci en tout cas !
6 juin 2005 à 23:26
Cela devient rare de nos jours !
26 avril 2005 à 14:49
merci encore
24 janv. 2005 à 20:15
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 !
31 août 2004 à 09:25
Merci pour tous ces encouragements ...
31 août 2004 à 09:23
31 août 2004 à 09:21
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
31 août 2004 à 09:05
Enfin une source qui va permettre d'utiliser autre chose que SQLserver !!!
Continue comme çà...
26 août 2004 à 16:20