IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Souci ORA 010000 Requete oracle c#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2013
    Messages
    976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 976
    Par défaut Souci ORA 010000 Requete oracle c#
    BOnjour,
    j'ai un soucis dans une fonction que j'utilise, pour executer une requete. Après avoir cherché sur internet, comme ils le précisent, j'ai bien fermé mes curseurs, mais l'erreur est toujours là, voici ma procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
     
       private string RechercheRaison(string numabo)
        {
            log.Debug("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            log.Debug("~Recuperation de la raison sociale pour le client " + numabo);
            log.Debug("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            NameValueCollection appSettings = System.Configuration.ConfigurationManager.AppSettings;
            OracleConnection OConnexion = new OracleConnection(appSettings["ConnexionString"]);
            string rechercheraison = "";
            string RAISON = "";
     
            OConnexion.Open();
            try
            {
     
                rechercheraison = "select RAISONPRE from " + System.Configuration.ConfigurationManager.AppSettings["CustomerInformationTable"] + " where NUMABO = '" + numabo + "'";
                log.Debug("requete  envoyee : " + rechercheraison);
     
                OracleCommand commRecherche = new OracleCommand(rechercheraison, OConnexion);
                OracleDataReader monreader = commRecherche.ExecuteReader();
     
     
                if (!monreader.HasRows)
                {
                    System.Threading.Thread.Sleep(2000);
                    monreader = commRecherche.ExecuteReader();
     
                }
     
                monreader.Read();
     
                if (monreader.HasRows)
                {
                    RAISON = commRecherche.ExecuteScalar().ToString();
                    log.Debug("RAISON récupéré :  " + RAISON);
                    log.Info("------ SUCCES DE LA RECUPERATION DE LA RAISON SOCIALE ----- ");
     
                }
                else
                {
                    log.Debug("Aucune raison retourné ");
                    RAISON = "";
                }
     
                return RAISON;
            }
            catch (Exception e)
            {
                log.Error("<> Erreur dans la recuperation de la raison : " + e.ToString());
     
                OConnexion.Close();
                OConnexion.Dispose();
                return "";
            }
            finally
            {
                OConnexion.Close();
                OConnexion.Dispose();
            } 
        }
    et le message retourné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     Erreur dans la recuperation de la raison sociale System.Data.OracleClient.OracleException (0x80131938): ORA-01000: nombre maximum de curseurs ouverts dépassé
     
       à System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
       à System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
       à System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, ArrayList& resultParameterOrdinals)
       à System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behavior)
       à System.Data.OracleClient.OracleCommand.ExecuteReader()
       à InjecteurDeMasse.Form1.RecuperationRaisonSocial(String numclt)
    Donc comme je le disais, je ferme mon curseur mais rien n'y fait. Petit détails ( qui a son importance ou pas ? ) dans mon code, j'ai aucune erreur mais ici par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      OracleConnection OConnexion = new OracleConnection(appSettings["ConnexionString"]);
    OracleConnection est souligné en verte et ça dis " system.dataOracle est obsolète ... OracleConnection has been depreciated ..... "

    Je vous remercie par avance pour les explications et votre aide.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Déjà essaie d'utiliser ODP.NET au lieu du fournisseur déprécié. Est-ce que ça change quelque chose ?

    [EDIT] : dispose ton reader, le problème vient peut-être de là vu que tu ne le fais jamais. D'où l'intérêt d'utiliser des blocs using.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2013
    Messages
    976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 976
    Par défaut
    Merci pour la réponse,
    en effet je n'avais pas pensé à libérer les ressources du reader, j'ai donc ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
               monreader.Read();
     
                if (monreader.HasRows)
                {
                    RAISON = commRecherche.ExecuteScalar().ToString();
                    log.Debug("RAISON récupéré :  " + RAISON);
                    log.Info("------ SUCCES DE LA RECUPERATION DE LA RAISON SOCIALE ----- ");
     
                }
                else
                {
                    log.Debug("Aucune raison retourné ");
                    RAISON = "";
                }
     monreader.Close();
    monreader.Dispose();
     
                return RAISON;
    mais il me retourne le même message d'erreur .......
    Je vous explique le principe, je fais appelle à la fonction dans une boucle for exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (int i =0;i<=compteur;i++)
    {
    ......
    tabDocumenClt[i, 8] = RecuperationRaison(numclt);
    .....
    }
    sachant que la limite de ma boucle peut etre tres elevé , en fonction du nombre de fichier present dans mon dossier.
    Au debut tout se passe bien dans mes logs apres par exemple en plein milieu j'ai l'erreur qui arrive 8/9 fois donc ma requete me retourne vide car elle rentre dans le catch, et apres ça reprend normalement bizzarement, il trouve un resultat et me retourne la raison .....
    Pourquoi je ne l'appel pas une fois ma fonction allé vous me dire ? le truc c'est que mon traitement est assez compliqué, car j'ai prevu le cas où le numclt est different, sinon si ça aurait été toujours le meme, là je me serais pas embeté c 'est sur.

    Je vais voir un peu avec ODP.NET

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    En relisant ton code, je me suis aperçu que tu utilises un mix entre Reader et Scalar. Or tu as à priori juste besoin de récupérer un produit scalaire... Essaie avec ce code :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    private string RechercheRaison(string numabo)
    {
        log.Debug("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        log.Debug("~Recuperation de la raison sociale pour le client " + numabo);
        log.Debug("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        NameValueCollection appSettings = System.Configuration.ConfigurationManager.AppSettings;
        using (var OConnexion = new OracleConnection(appSettings["ConnexionString"]))
        {
            string rechercheraison = "";
            string RAISON = "";
     
            OConnexion.Open();
            try
            {
                rechercheraison = "select RAISONPRE from " + System.Configuration.ConfigurationManager.AppSettings["CustomerInformationTable"] + " where NUMABO = '" + numabo + "'";
                log.Debug("requete  envoyee : " + rechercheraison);
     
                using (var commRecherche = new OracleCommand(rechercheraison, OConnexion))
                {
                    var scalarResult = commRecherche.ExecuteScalar();
                    if (scalarResult != null)
                    {
                        RAISON = scalarResult.ToString();
                        log.Debug("RAISON récupéré :  " + RAISON);
                        log.Info("------ SUCCES DE LA RECUPERATION DE LA RAISON SOCIALE ----- ");
                    }
                    else
                    {
                        log.Debug("Aucune raison retourné ");
                        RAISON = "";
                    }
                }
     
                return RAISON;
            }
            catch (Exception e)
            {
                log.Error("<> Erreur dans la recuperation de la raison : " + e.ToString());
            }
        }
    }
    Tu noteras que j'ai inclu des blocs using, donc il n'est plus nécessaire de gérer manuellement le Close et le Dispose des objets concernés par le bloc
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2013
    Messages
    976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 976
    Par défaut
    merci bien !
    Cependant j'ai une autre erreur qui est apparue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    ERROR 2013-07-12 15:06:26 – <> Erreur dans la recuperation dunrid : System.InvalidOperationException: La propriété CommandText n'a pas été initialisée.
       à System.Data.OracleClient.OracleCommand.get_StatementText()
       à System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
       à System.Data.OracleClient.OracleCommand.ExecuteScalarInternal(Boolean needCLStype, Boolean needRowid, OciRowidDescriptor& rowidDescriptor)
       à System.Data.OracleClient.OracleCommand.ExecuteScalar()
       à InjecteurDeMasse.Form1.RecuperationNRID(String numabo)
    J'ai regardé un peu c'était dû à quoi et ça me laisse perplexe, car comme l'on crée un objet command avec ma requete et ma connection, je trouve ça étrange qu'il me dis que la propriété CommandText est obligatoire, en regardant un j'ai vu qu'il fallait l'initialisé de la manière suivante, si je dis pas de bêtise :" macommand.CommandText = marequete " ?

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Oui effectivement c'est bizarre vu qu'on passe la requête dans le constructeur de la commande

    Avant d'aller plus loin, bascule sur ODP.NET histoire d'être à jour. Est-ce que tu as toujours le problème suite à cette mise à niveau ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Oracle] requete oracle avec php
    Par ghostdog dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/05/2006, 17h21
  2. requete oracle
    Par z.e.k dans le forum Oracle
    Réponses: 7
    Dernier message: 16/03/2006, 09h40
  3. transformation d'une requete oracle en mysql
    Par isa21493 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/03/2006, 16h00
  4. [REQUETE ORACLE] Vols avec ou sans escales
    Par e-lifestyle dans le forum Oracle
    Réponses: 7
    Dernier message: 06/01/2006, 22h46
  5. [sgbd]Optimisation des requetes Oracle/Perl
    Par linou dans le forum SGBD
    Réponses: 7
    Dernier message: 30/06/2005, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo