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 :

Invalid attempt to call Read when reader is closed. [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 7
    Par défaut Invalid attempt to call Read when reader is closed.
    Bonjour,

    Je suis en train de créer une application web à l'aide de Sql Server et c# (sur visual studio).

    J'ai cette 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
     public void nom_info() {
     
                /* Ouvrir une connexion avec la BDD si elle n'est pas déjà faite */
                if (con1.State == ConnectionState.Closed)
                {
                    con1.Open();
                }
     
                /* Auto complèter les champs lors de la selection d'un nom pré-enregistrer */
                SqlCommand cmd1 = new SqlCommand("SELECT nom FROM contact WHERE id_contact ='" + textID.Text.ToString() + "'", con1);
                cmd1.ExecuteNonQuery();
                SqlDataReader dr;
                dr = cmd1.ExecuteReader();
                while (dr.Read())
                {
                    string nom = (string)dr["nom"].ToString();
                    boxNom.Text = nom;
     
                }
            }


    Mais j'ai cette erreur qui apparait. Je ne comprends pas trop pourquoi car dans une autre procédure avec le meme code pour ouvrir/fermer les différents élléments qui remplit d'autre comboBox / textBox, l'erreur n'apparait pas. Seulement la comboBox qui doit contenir le champs du nom affiche cette erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dll
     
    Additional information: Invalid attempt to call Read when reader is closed.
    Merci d'avance pour votre aide.
    Bien cordialement

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 981
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 981
    Par défaut
    Enlève la ligne 11.
    De plus, il n'est pas sécurisé de concaténer les paramètres, il faut utiliser une requête paramétrée.
    Le ToString sur "textID.Text" est inutile puisque c'est déjà du texte
    De même le Cast forcé sur "dr["nom"].ToString()" est inutile cat ToString renvoie déjà un String

    La procédure conseillé pour une requête SELECT est la suivante dans ton cas :
    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
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        using (SqlCommand command = new SqlCommand())
        {
            command.Connection = connection;
            command.Parameters.Add("@IdContact", SqlDbType.VarChar).Value = textID.Text;
            command.CommandText = "SELECT nom FROM contact WHERE id_contact =@IdContact";
     
            try
            {
                connection.Open();
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        boxNom.Text = reader.GetString(0);
                    }
                }
            }
            catch (Exception ex) 
            { 
                // Eventually log the exception
            }
        }
    }

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 7
    Par défaut
    Ca marche merci !

    Je vais faire les modifications pour les autres SELECT.

    Merci encore, bonne fin de journée.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/12/2017, 18h19
  2. [3.x] Attempted to call an undefined method named
    Par Wilhem31 dans le forum Symfony
    Réponses: 7
    Dernier message: 21/09/2017, 14h19
  3. Réponses: 1
    Dernier message: 15/11/2010, 14h49
  4. Invalid web service call, missing value for parameter
    Par lutecefalco dans le forum ASP.NET
    Réponses: 4
    Dernier message: 10/03/2010, 15h01
  5. Message 'attempted update of read-only column'
    Par Mirmillon dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/04/2006, 09h21

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