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

ASP.NET Discussion :

La méthode ne peut pas être appelée lorsqu'il existe un DataReader ouvert associé à la commande


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Points : 34
    Points
    34
    Par défaut La méthode ne peut pas être appelée lorsqu'il existe un DataReader ouvert associé à la commande
    Bonjour à tous,

    Nous avons une application asp.net qui fonctionne très bien en local. Lorsque je déploie celle-ci sur le serveur web, une exception est générée. Cette exception est générée de manière très aléatoire (souvent au bout d'un certains temps d'utilisation).

    Voici l'exception :
    System.InvalidOperationException: La méthode ne peut pas être appelée lorsqu'il existe un DataReader ouvert associé à la commande.
    at IBM.Data.DB2.iSeries.iDB2Command.set_UseOptimisticUpdateColumns(Boolean value)
    at Inventaire.DAL.InventaireDataSetTableAdapters.INV_LISTE_DETAILS_RES_LIGHTTableAdapter.GetListeDetailsComptesByEmplacement(Nullable`1 ID_LISTE, String EMPLACEMENT, String ETABLISSEMENT, String DEPOT) in D:\Projets\InventaireSolution\InventaireDAL\InventaireDataSet.Designer.cs:line 19983
    Pour accéder à la base de données, nous utilisons les DataSet. Et si je regarde le code généré à la ligne incriminée (dans le fichier Designer.cs) :
    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
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
            [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
            public virtual InventaireDataSet.INV_LISTE_DETAILS_RES_LIGHTDataTable GetListeDetailsComptesByEmplacement(global::System.Nullable<decimal> ID_LISTE, string EMPLACEMENT, string ETABLISSEMENT, string DEPOT) {
                this.Adapter.SelectCommand = this.CommandCollection[3];
                if ((ID_LISTE.HasValue == true)) {
                    this.Adapter.SelectCommand.Parameters[0].Value = ((decimal)(ID_LISTE.Value));
                }
                else {
                    this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
                }
                if ((EMPLACEMENT == null)) {
                    this.Adapter.SelectCommand.Parameters[1].Value = global::System.DBNull.Value;
                }
                else {
                    this.Adapter.SelectCommand.Parameters[1].Value = ((string)(EMPLACEMENT));
                }
                if ((ETABLISSEMENT == null)) {
                    this.Adapter.SelectCommand.Parameters[2].Value = global::System.DBNull.Value;
                }
                else {
                    this.Adapter.SelectCommand.Parameters[2].Value = ((string)(ETABLISSEMENT));
                }
                if ((DEPOT == null)) {
                    this.Adapter.SelectCommand.Parameters[3].Value = global::System.DBNull.Value;
                }
                else {
                    this.Adapter.SelectCommand.Parameters[3].Value = ((string)(DEPOT));
                }
                InventaireDataSet.INV_LISTE_DETAILS_RES_LIGHTDataTable dataTable = new InventaireDataSet.INV_LISTE_DETAILS_RES_LIGHTDataTable();
                this.Adapter.Fill(dataTable);
                return dataTable;
            }
    Pour la petite histoire, nous faisons tourner l'application sur un pool applicatif séparé.
    Si aucune application ne tourne sur les autres pools applicatifs alors l'exception ne se produit pas. Par contre, si nous lancons les autres applications sur les autres pools applicatifs alors l'exception se produit.

    Lorsque cette exception se produit alors toutes les autres pages sont encore disponibles (sauf celle qui contient la requete ci-dessus). Pour régler le problème, nous recyclons le pool applicatif.

    Mon environnement technique :
    - base de données : iSeries DB2
    - serveur Web : Windows Server 2008 R2 / IIS 7
    - framework .Net 3.5

    Si vous avez des idées sur l'origine du problème, je suis preneur car je commence à être à bout de solutions.

    Merci d'avance et bonne journée
    Luc
    "De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent" (Desproges)

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    Il aurait été interessant d'avoir le code du fameux datareader qui ne fonctionne pas ?
    Ce qui est etrange c'est qu'en local il devrait aussi de temps en temps planté

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ce qui est bizarre, c'est que la pile indique que ça plante dans le set de la propriété UseOptimisticUpdateColumns, dans la méthode GetListeDetailsComptesByEmplacement... or dans cette méthode la propriété en question n'est jamais affectée

    A quelle ligne du code que tu as posté correspond la ligne 19983 ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par tortuegenie Voir le message
    Il aurait été interessant d'avoir le code du fameux datareader qui ne fonctionne pas ?
    Le code que je met dans le message ci-dessous est le code généré par mon DataSet. Donc je n'utilise jamais moi-même ce fameux DataReader.

    Citation Envoyé par tomlev Voir le message
    A quelle ligne du code que tu as posté correspond la ligne 19983 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((ID_LISTE.HasValue == true)) {
    Etrange tout de même.
    "De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent" (Desproges)

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par luc2verga Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((ID_LISTE.HasValue == true)) {
    Etrange tout de même.
    Assez bizarre, oui
    Tu es sûr que le code que tu as posté correspond bien à ce qui est déployé sur le serveur ? A mon avis ce n'est pas le cas ; vérifie que tu as bien recompilé l'application

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Assez bizarre, oui
    Tu es sûr que le code que tu as posté correspond bien à ce qui est déployé sur le serveur ? A mon avis ce n'est pas le cas ; vérifie que tu as bien recompilé l'application
    Oui j'ai revérifié.
    Je me demande s'il n'y a pas un problème de connexion qui se ferme mal.!?
    "De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent" (Desproges)

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par luc2verga Voir le message
    Oui j'ai revérifié.
    Bah en tous cas c'est absolument impossible que la ligne que tu as indiqué provoque cette erreur, vu que ça ne fait pas du tout intervenir la classe iDB2Command où l'erreur se produit...

  8. #8
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    On en revient á la question que j'ai posé au debut

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par tortuegenie Voir le message
    On en revient á la question que j'ai posé au debut
    Quelle question ?
    "De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent" (Desproges)

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Points : 34
    Points
    34
    Par défaut
    Je reviens vers vous pour vous expliquer la suite du problème.
    Sur le dernier mois, nous avions 4 à 5 personnes qui travaillaient en continu sur l'application. Quasiment une fois par jour nous avions cette exception.
    Depuis trois jours, seulement une ou deux personnes travaillent sur cette application et aucune exception !!!

    Lorsque l'exception se produit, la page web n'est plus accessible (car la requete plante) et donc nous recyclons le pool applicatif.

    Est-ce qu'avec ces informations complémentaires, quelqu'un voit d'où peut venir le problème ?
    "De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent" (Desproges)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 49
    Points : 34
    Points
    34
    Par défaut
    Dans la même veine, voici une autre exception qui se produit très rarement :

    Inventaire.DAL.Exceptions.InventaireDALException: Impossible d'ajouter le résultat de l'emplacement ---> System.InvalidOperationException: La connexion est déjà ouverte.
    at IBM.Data.DB2.iSeries.iDB2Connection.Open()
    at Inventaire.DAL.InventaireDataSetTableAdapters.INV_LISTE_EMPLACEMENT_RESTableAdapter.GetNewId() in D:\Projets\InventaireSolution\InventaireDAL\InventaireDataSet.Designer.cs:line 22594
    Et voici le code :
    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
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
            public virtual object GetNewId() {
                global::IBM.Data.DB2.iSeries.iDB2Command command = this.CommandCollection[2];
                global::System.Data.ConnectionState previousConnectionState = command.Connection.State;
                if (((command.Connection.State & global::System.Data.ConnectionState.Open) 
                            != global::System.Data.ConnectionState.Open)) {
                    command.Connection.Open();
                }
                object returnValue;
                try {
                    returnValue = command.ExecuteScalar();
                }
                finally {
                    if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
                        command.Connection.Close();
                    }
                }
                if (((returnValue == null) 
                            || (returnValue.GetType() == typeof(global::System.DBNull)))) {
                    return null;
                }
                else {
                    return ((object)(returnValue));
                }
            }
    Sachant que la ligne 22594 est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    command.Connection.Open();
    "De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent" (Desproges)

  12. #12
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    Connexion déjà ouverte, cela implique qu'il faut vérifier avant si elle a été fermée ou encore ouverte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (cd.Connection.State == System.Data.ConnectionState.Closed)
    {
        command.Connection.Open();
    }

Discussions similaires

  1. [AC-2007] erreur lorsqu'un évenement ne peut pas être exécuté
    Par joamb01 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/11/2012, 15h24
  2. Réponses: 1
    Dernier message: 24/09/2010, 15h00
  3. Réponses: 1
    Dernier message: 22/09/2010, 12h13
  4. Réponses: 3
    Dernier message: 08/12/2009, 15h13
  5. Réponses: 6
    Dernier message: 03/09/2003, 10h29

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