Oracle killed me

Salut les gens.
J’ai un petit problème qui me bourre le choux depuis un bon moment, et j’arrive pas à avancer, même google ne m’a pas vraiment aidé avec les solutions proposées.

Voici le code :

[code]private static Business.Glossary[] GetAll(string commandText){
Surcharge.OraDataReader __dr = null;
Surcharge.OracleClient __client = null;
try
{
__dr = DataAccessor.GetData(__client, commandText);
while(__dr.Read()){
Glossary __newGlossary = new Glossary(__dr[“ID1”], __dr[“ID2”]);
__glossaries.Add(__newGlossary);
}
}finally{
if(Validation.IsNotNull(__dr)) { __dr.Close(); }
}
return (Business.Glossary[])__glossaries.ToArray(typeof(Business.Glossary));
}


internal static Surcharge.OraDataReader GetData(Surcharge.OracleClient __client, string commandText)
{
__client = new Surcharge.OracleClient(ConnectionString);
Surcharge.OraDataReader __dr = null;
try{
__dr = __client.ExecuteReader(CommandType.Text, commandText);
}catch(Exception e){
string errorMessage = e.Message;
__client.Close();
throw e;
}
return __dr;
}[/code]

J’espère pas avoir fait un copier coller trop cochon.
Bon, le problème est le suivant, ça marche généralement tout le temps.
Des fois, sans raison réellement logique, ça plante.
Sur une ligne précise, toujours la même :

A ce moment je me prend une exception Oracle : Connection mut be open for this operation

Et je trouve pas.

Dans la logique je me dis qu’il s’est passé quelque chose en mémoire qui a fait fermer la connection. Mais pourquoi ?
Je crée ma connection et la récupère normalement par le paramètre de la méthode. Pourquoi je le perd ? Ais-je oublié un notion aussi simple sur la durée de vie des variables ?

2eme hypothèse : Le static. C’est un site web, et donc plusieurs personnes à la fois se connecte et interroge la base.
Cela va-t-il poser problème ? Normalement non, cela crée une queue, mais la queue précédente va-t-elle exploser la connection de la queue suivante ?

Bref, je reste assez étonné du problème sans vraiment bien le comprendre.
Et je vais bientôt mourir vu la thématique de la réunion de ce soir à ce sujet…

Pourriez pas m’aider siou plait…?

PS: Oui, ici ils ont un framework dans lequel ils ont surchargé le space OracleClient.

Donc oui, le static et le web ca fait beaucoup, à mon avis, tu prends bien un tir à cause de ça.
2 appels simultanés de la méthode chient dans la colle avec un tel code : étant donné que tu as une variable privé statique __client, si un autre thread rentre dans le GetData() alors que le premier thread est sur le while(), tu as toutes les chances que ca merde.

Une solution consiste à mettre un lock sur ta méthode, en utilisant un truc qui ressemblerait à ça :

[code]static readonly object syncLock = new object();

private static Business.Glossary[] GetAll(string commandText){
lock(syncLock)
{

}
}[/code]

Va question a pas grand chose à voir et je vais pas apporter d’élément de réponse, mais d’où vient cette étrange coutûme qui consiste à mettre des underscores en préfixe de nom de variables ? C’est pas la première fois que je vois ça et ça m’intrigue.

Merci !

[quote=“LeGzo, post:3, topic: 31267”]Va question a pas grand chose à voir et je vais pas apporter d’élément de réponse, mais d’où vient cette étrange coutûme qui consiste à mettre des underscores en préfixe de nom de variables ? C’est pas la première fois que je vois ça et ça m’intrigue.

Merci ![/quote]
Ca dépend de l’endroit, de la boite…
Certains reste avec la notation string strVariable

Ici, c’est 2 underscores pour les variables locales d’une méthode, un seul pour les membres d’une classe, et aucun pour les noms de classe, méthodes, …

Le lock n’a pas résolu le problème.
On vire autant de static qu’on peut.

J’hésite à dire “tin de délais” ou “tin de stagiaire”.
Jamais vu autant d’internal static dans un projet web

[quote=“LeGzo, post:3, topic: 31267”]Va question a pas grand chose à voir et je vais pas apporter d’élément de réponse, mais d’où vient cette étrange coutûme qui consiste à mettre des underscores en préfixe de nom de variables ? C’est pas la première fois que je vois ça et ça m’intrigue.

Merci ![/quote]
Et ici c’est underscore devant les membres privés, pas d’underscore devant les variables privées. Une notation parmi tant d’autres, ouaip. Parfois c’est m_, parfois autre chose. C’est selon les règles de codage de chaque boite et de chacun.

Et pour Xas : ce qui est mal, ce n’est pas tant les méthodes statiques, mais bien les variables statiques partagées par tout le monde. Et j’ai du mal à piger pourquoi le lock n’a pas résolu le problème… Enfin, ca a l’air tordu.